我有一个CABasicAnimation
动画一个CALayer
例如的属性bounds.origin
。我希望能够观察到属性随时间的变化,但还没有真正找到一种 100% 有效的方法。
presentationLayer
我尝试在的键路径上使用 KVO(键值观察)bounds.origin
。系统抱怨对象在其观察者被释放之前被释放,导致我认为表示层只是暂时的。作为键路径观察presentationLayer.bounds.origin
是行不通的。我尝试在另一个图层上创建一个属性并为其设置动画,例如通过声明并在该图层上
@property
制作它。@dynamic
然而,这个新属性只有在访问表示层时(例如在动画结束时)才会改变,它似乎在动画运行时不会更新。我
needsDisplayForKey
在#2 中使用了属性,它确实会在动画期间触发更新,但是对于这些问题:- 它仅在
CALayer
具有非零帧时才有效。由于该层可能是 CAShapeLayer 或子类,因此它可能具有零帧。 - 看起来它触发
setNeedsDisplay
了该层,但由于我实际上并没有绘制该层,只监视属性更改,所以我不想让它重绘。
- 它仅在
我尝试安排一个
NSTimer
, 并在计时器回调样本中presentationLayer
. 这也适用,但对于这些问题:- 计时器可能与动画更新稍微不同步。
- 由于有时原始动画会被另一个动画抢占,因此很难真正让计时器在动画运行时触发,并且仅在动画运行时触发。
有什么建议么?所有这些都将在 iPhoneOS 3.0/3.1 上进行。