小编Reg*_*ent的帖子

观察CALayer中的动画属性更改

我有一个CABasicAnimation动画的属性,CALayer例如bounds.origin.我希望能够观察到随着时间的推移而变化的属性,但还没有找到一种100%有效的方法.

  1. 我试图在使用国际志愿者组织(键值观察)presentationLayer的bounds.origin的keyPath.系统抱怨在释放观察者之前释放了对象,这使我认为表示层只是临时的.观察presentationLayer.bounds.origin为密钥路径不起作用.

  2. 我尝试在另一个图层上创建一个属性并为其设置动画,例如通过声明@property并@dynamic在该图层上创建它.但是,只有在访问表示层时(例如,在动画结束时)才会更改此新属性,但在动画运行时它似乎不会更新.

  3. 我needsDisplayForKey在#2中使用了属性,它在动画期间触发更新,但对于这些问题:

    • 它仅在CALayer具有非零帧时才有效.由于该层可能是CAShapeLayer或子类,因此它可能具有零帧.
    • 看起来它触发setNeedsDisplay了该层,但由于我实际上并没有绘制该层只监视属性更改,我不想让它重绘.
  4. 我试过安排一个NSTimer,并在定时器回调样本中presentationLayer.这也适用于这些问题:

    • 计时器可能与动画更新略有不同步.
    • 由于偶尔会有原始动画被另一个动画抢占,因此在动画运行时以及仅在动画运行时才能实际触发定时器.

有什么建议?所有这些都将在iPhoneOS 3.0/3.1上.

iphone macos core-animation objective-c calayer

27
推荐指数
2
解决办法
4510
查看次数

目标C中的工厂(设计模式)

我正在尝试在Objective C中创建一个工厂(设计模式)所以我做的事情如下:

+ (Car *)createCar:(int)color {
    if (color == 1) {
        return [CarFactory createBlueCar];
    } else if (color == 2) {
        return [CarFactory createRedCar];
    } else {
        return nil;
    }
}

+ (Car *)createBlueCar {
    // ...
}

+(Car*)createRedCar{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

不过,我不希望createBlueCar和createRedCar可用公众,如果我没有在中定义这些.h文件,然后我得到缺少定义的警告.

我是一名前Java开发人员,也是Objective-C的新手 - 所以这可能只是一种不好的做法.如果是这样,这样做的好习惯是什么.

objective-c

26
推荐指数
1
解决办法
2万
查看次数

Objective-C中的类对象是什么?

好吧,所以我理解一个对象是一个必须分配和初始化的类的实例,但类本身是对象吗?

我知道当你创建一个新类时,它是一个其他的实例,比如NSObject.所以,如果这使它成为一个类,那么对象不仅可以容纳变量和方法,还可以容纳其他对象,对吧?

对不起,这可能是非常基本的,但我正在读两本关于可可和xcode的书,这一点有点不清楚(可能是因为我缺乏其他语言的经验).

macos cocoa metaclass class objective-c

24
推荐指数
1
解决办法
5686
查看次数

在调用非虚拟基本方法时,C++中是否有任何惩罚/成本的虚拟继承?

当我们从其基类调用常规函数成员时,在C++中使用虚拟继承是否会在编译代码中产生运行时损失?示例代码:

class A {
    public:
        void foo(void) {}
};
class B : virtual public A {};
class C : virtual public A {};
class D : public B, public C {};

// ...

D bar;
bar.foo ();
Run Code Online (Sandbox Code Playgroud)

c++ runtime overhead virtual-inheritance

22
推荐指数
3
解决办法
3874
查看次数

解释卡尔曼滤波器中的过程噪声术语

我只是在学习卡尔曼滤波器.在卡尔曼滤波器术语中,我对过程噪声有一些困难.在许多具体的例子中,过程噪声似乎被忽略了(大多数都集中在测量噪声上).如果有人能够通过示例向我指出一些介绍过程噪声的介绍级别链接,那就太棒了.

让我们使用一个具体的标量例子给出我的问题,给出:

x_j = a x_j-1 + b u_j + w_j
Run Code Online (Sandbox Code Playgroud)

让我们说x_j随着时间的推移模拟冰箱内的温度.它是5度,应该保持这种方式,所以我们建模a = 1.如果在某些时候t = 100,冰箱的温度变为7度(即炎热的天气,绝缘不良),那么我相信此时的过程噪声是2度.所以我们的状态变量x_100 = 7度,这是系统的真正价值.

问题1:

如果我然后解释我经常看到的用于描述卡尔曼滤波器的短语,"我们过滤信号x以使噪声w的影响最小化",http://www.swarthmore.edu/NatSci/echeeve1/Ref/Kalman/ ScalarKalman.html如果我们最小化2度的影响,我们是否试图摆脱2度的差异?但真正的状态是x_100 == 7度.当我们卡门过滤器时,我们对过程噪声做了什么?

问题2:

过程噪声有变化Q.在简单的冰箱示例中,模型似乎很容易,因为您知道底层的真实状态是5度,您可以将其Q视为与该状态的偏差.但是,如果真正的潜在状态随时间波动,那么当你建模时,这部分将被视为状态波动与"过程噪声".我们如何确定一个好的Q(再一个例子会很好)?

我发现,Q无论你处于哪个时间步长,总是会添加到协方差预测中(参见http://greg.czerniak.info/guides/kalman1/中的协方差预测公式),如果选择过大Q,那么看起来卡尔曼滤波器看起来并不是很好.

谢谢.

EDIT1我的解释

我对术语过程噪声的解释是系统的实际状态与从状态转移矩阵(即a * x_j-1)建模的状态之间的差异.卡尔曼滤波器试图做的是使预测更接近实际状态.从这个意义上讲,它实际上通过剩余反馈机制将过程噪声部分地"合并"到预测中,而不是"消除"它,以便它可以更好地预测实际状态.我在搜索的任何地方都没有看过这样的解释,我很感激有人评论这个观点.

kalman-filter

21
推荐指数
1
解决办法
2万
查看次数

日期序数输出?

我想知道在python中给出一个数字是否有一种快速简便的输出序数的方法.

例如,给定数字1,我想输出"1st",数字2,"2nd"等等等.

这是用于处理面包屑路径中的日期

Home >  Venues >  Bar Academy >  2009 >  April >  01 
Run Code Online (Sandbox Code Playgroud)

是目前显示的

我想要有一些东西

Home >  Venues >  Bar Academy >  2009 >  April >  1st
Run Code Online (Sandbox Code Playgroud)

python

20
推荐指数
4
解决办法
9837
查看次数

Objective-C:NSLinguisticTagger"纽约"vs"纽约"

我刚刚开始在NSLinguisticTagger我的博客上使用我的代码:NSLinguisticTagger @ NSHipster.com

NSLinguisticTaggerOptions options = NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerOmitPunctuation | NSLinguisticTaggerJoinNames;
NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes: [NSLinguisticTagger availableTagSchemesForLanguage:@"en"] options:options];
tagger.string = question;
[tagger enumerateTagsInRange:NSMakeRange(0, [question length]) scheme:NSLinguisticTagSchemeNameTypeOrLexicalClass options:options usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) {
NSString *token = [question substringWithRange:tokenRange];
NSLog(@"%@: %@", token, tag); }];
Run Code Online (Sandbox Code Playgroud)

当我运行它时question = @"Weekend in New York","New York"标记为PlaceName哪个是伟大的.但是,当我跑这跟question = @"Weekend in new york","new"被标记为"Adjective"与"york"被标记为PlaceName.有没有办法解决这个问题,"New …

objective-c ios ios5

18
推荐指数
1
解决办法
2068
查看次数

如何防止CALayer隐式动画?

当我设置实例的backgroundColor属性时CALayer,更改似乎有点动画.但在我的情况下,我不希望这样.如何设置backgroundColor无动画?

iphone calayer

16
推荐指数
4
解决办法
7532
查看次数

设置新创建的CAShapeLayer的正确框架

简而言之:

  1. Apple没有自动设置frame或bounds为CAShapeLayer(并且Apple未实现等效[UIView sizeThatFits])
  2. 如果使用路径边界框的大小设置框架......一切都会出错.无论你如何设置它,它都会搞砸道路

那么,什么是编程设定的新创建的框架的正确方法CAShapeLayer与新添加的CGPath?Apple的文档在此事上保持沉默.

我尝试过的东西,不起作用:

  1. 创建一个 CAShapeLayer
  2. 创建一个CGPath,将其添加到图层
  3. 检查图层frame- 它是{{0,0},{0,0}}
  4. 组: layer.frame = CGPathGetBoundingBox( layer.path )
  5. 帧现在是正确的,但路径现在是DOUBLE偏移 - 改变frame路径有效地移动一个额外的(x,y)像素

  6. 组: layer.bounds = CGPathGetBoundingBox( layer.path )

  7. ......一切都疯了.没有任何意义了
  8. 尝试修复它 layer.position = CGPathGetBoundingBox( layer.path ).origin
  9. ...没有骰子; 仍然坚果.

有一件事我尝试过DID可以工作,但会导致其他地方出现问题:

编辑:一旦您自动旋转屏幕,这个BREAKS.我的猜测:Apple的自动旋转需要控制"转换"属性.

  1. 创建一个 CAShapeLayer
  2. 创建一个CGPath,将其添加到图层
  3. 检查图层的框架 - 它是 {{0,0},{0,0}}
  4. 组: layer.frame = CGPathGetBoundingBox( layer.path )
  5. 组: layer.transform = CGAffineTransformMakeTranslation( CGPathGetBoundingBox( …

calayer cashapelayer cgpath

16
推荐指数
1
解决办法
4117
查看次数

Cocoa:寻找编程操作NSTextView存储的一般策略,而不会弄乱撤消

我在cocoa中编写了一个特殊用途的文本编辑器,它可以执行自动文本替换,内联文本完成(ala Xcode)等操作.

我需要能够以编程方式操纵NSTextView的NSTextStorage响应于1)用户打字,2)用户粘贴,3)用户滴文本.

我尝试了两种不同的通用方法,它们都导致了NSTextView本机撤销管理器以不同的方式失去同步.在每种情况下,我只使用NSTextView委托方法.我一直试图避免继承NSTextview或NSTextStorage(尽管我会在必要时继承).

我想第一种方法是从内做操作textView delegate的textDidChange方法.从该方法中,我分析了已经更改的内容textView,然后调用了一个通用方法,用于修改包含textStorage中的更改的文本,并调用shouldChangeTextInRange:和didChangeText:.一些程序化更改允许清除撤消,但有些没有.

第二个(也许更加直观,因为它使修改文本之前居然出现在textView)的方法,我试图从内做操作delegate的shouldChangeTextInRange:方法,再次使用该包装的变化在存储有相同的通用存储修改方法打电话给shouldChangeTextInRange:和didChangeText:.由于这些更改最初是从内部触发的shouldChangeTextInRange:,因此我设置了一个标志,告诉内部调用shouldChangeTextInRange:被忽略,以免输入递归黑洞.同样,一些程序化更改允许清除撤消,但有些没有(虽然这次不同,并以不同的方式).

有了这样的背景,我的问题是,是否有人能指出我的一般策略,以编程方式操作存储,以NSTextview保持撤消管理器清洁和同步?

NSTextview我应该在哪个委托方法中注意textView中的文本更改(通过键入,粘贴或删除)并对其进行操作NSTextStorage?或者是通过子类化或者NSTextView或者唯一的干净方式来做到这一点NSTextStorage?

objective-c nstextview nsundomanager

15
推荐指数
1
解决办法
1333
查看次数