gpt4 book ai didi

iphone - 观察 CALayer 中的动画属性变化

转载 作者:太空狗 更新时间:2023-10-30 03:10:31 26 4
gpt4 key购买 nike

我有一个 CABasicAnimation 可以为 CALayer 的属性设置动画,例如边界.origin。我希望能够观察属性随时间的变化,但还没有真正找到 100% 有效的方法。

  1. 我尝试在 presentationLayerbounds.origin 键路径上使用 KVO(键值观察)。系统提示对象在它的观察者被释放之前被释放,这让我认为表示层只是临时的。将 presentationLayer.bounds.origin 作为键路径进行观察是行不通的。

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

  3. 我在 #2 中的属性上使用了 needsDisplayForKey,这确实会在动画期间触发更新,但存在以下问题:

    • 它仅在 CALayer 具有非零帧时才有效。由于该层可能是 CAShapeLayer 或子类,因此它可能具有零帧。
    • 看起来它触发了该层的 setNeedsDisplay,但由于我实际上并没有绘制该层,只是监视属性变化,所以我不想让它重绘。
  4. 我尝试安排 NSTimer,并在计时器回调中对 presentationLayer 进行采样。这也适用于这些问题:

    • 计时器可能会与动画更新略微不同步。
    • 由于原始动画有时会被另一个动画抢占,因此很难真正让计时器在动画运行时触发并且仅在动画运行时触发。

有什么建议吗?所有这些都将出现在 iPhoneOS 3.0/3.1 上。

最佳答案

尝试使用 CADisplayLink,它旨在与动画循环保持同步。更多信息:https://ashfurrow.com/blog/animating-views-with-cadisplaylink/

关于iphone - 观察 CALayer 中的动画属性变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1557739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com