我有一个CABasicAnimation
动画 a 的属性CALayer
e.g. bounds.origin
。我希望能够观察属性随时间的变化,但还没有真正找到一种 100% 有效的方法。
我尝试使用 KVO(键值观察)presentationLayer
's bounds.origin
键路径。系统抱怨对象在其观察者被释放之前被释放,这让我认为表示层只是暂时的。观察presentationLayer.bounds.origin
因为键路径不起作用。
我尝试在另一层上创建一个属性并为其设置动画,例如通过声明@property
并制作它@dynamic
在那一层上。然而,这个新属性仅在访问表示层时(例如在动画结束时)才会更改,在动画运行时它似乎不会更新。
-
I used needsDisplayForKey
在 #2 中的属性上,它确实会在动画期间触发更新,但对于以下问题:
- 它只有在以下情况下才有效
CALayer
有非零帧。由于该层可能是 CAShapeLayer 或子类,因此它可能具有零帧。
- 看起来会触发
setNeedsDisplay
对于该图层,但由于我实际上并未绘制该图层,只是监视属性更改,因此我不想导致它重绘。
-
我尝试安排NSTimer
,并在计时器回调示例中presentationLayer
。这也适用,但对于以下问题:
- 计时器可能与动画更新稍微不同步。
- 由于有时原始动画会被另一个动画抢占,因此很难在动画运行时并且仅在动画运行时真正触发计时器。
有什么建议么?所有这一切都将在 iPhoneOS 3.0/3.1 上进行。
尝试使用 CADisplayLink,它旨在与动画循环保持同步。更多信息:https://ashfurrow.com/blog/animating-views-with-cadisplaylink/ https://ashfurrow.com/blog/animating-views-with-cadisplaylink/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)