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