我有一个重复的动画,我需要与其他一些瞬态动画同步。重复动画是一条扫描线,在屏幕上移动4秒。当它通过下面的图像时,这些图像需要" blip。"
眨眼图像可以随时随地移动并随意移动。它们也不属于同一层。
我无法弄清楚如何使扫描线和图像动画保持同步。我会考虑将它们全部添加到CAAnimationGroup,但是"动画" property是一个只读的NSArray,所以看起来每次添加,删除或移动其中一个动态动画时我都必须重新创建该组,这将是相当频繁的。我还猜测创建一个新组意味着需要重新启动扫描线动画,导致它不稳定。
根据这篇文章:
=">在定期动画进度间隔中调用方法的CAAnimation?
核心动画是基于时间的,"但是我不确定我是否完全理解这对于重复动画的意义以及它的可靠性(我无法在任何在线文档中找到这一点)。这是否意味着如果我在时间x开始重复动画的扫描线,它将在它启动后以精确的4s间隔重复?该应用程序如何进入后台并返回或类似?
感谢您的帮助!
赖安
答案 0 :(得分:3)
在摆弄了一下之后,我发现我可以通过确保他们的beginTimes排成一行来同步我的动画。我开始设置扫描线动画的beginTime:
scanAnimation.beginTime = CACurrentMediaTime();
从那里我简单地计算了4s窗口内的偏移量(称之为dt
)并将其他动画的beginTimes设置为:
blipAnimation.beginTime = scanAnimation.beginTime + dt;
即使beginTime过去,这也很有效;动画引擎实际上向前推断,并在扫描动画循环回来后设置下一个blip dt
秒。
缺点是我现在已经完全击败了帧速率。我正在尝试找到有关Core Animation性能的有用信息,但到目前为止无济于事。到目前为止,我已经采用了一种非常简单的方法来布局我的所有图像和动画,并且我准备重写大量代码来优化它,但我不想在没有做好准备的情况下进行重写。任何有关Core Animation如何工作的深入讨论的指南都非常方便。