我遇到的情况是,我有许多 CALayer,它们以“回合制”方式进行动画处理。我为每个 CALayer 上的位置设置动画,但它们的持续时间完全相同。一旦所有这些 CALayer 完成动画处理,就会启动新的“回合”,并且它们会再次以动画方式更改位置。

整个想法是,通过位置之间的线性插值,并且以恒定的速度,状态之间基于回合的转换看起来像实时动画。然而,对于许多不同的 CALayers 来说这是很难实现的。

CAAnimationGroup 用于将单个 CALayer 上的动画分组在一起。但我想知道,是否有一个简单的解决方案可以将多个 CALayer 上具有相同持续时间的动画分组在一起?

编辑以包含对凯文巴拉德问题的答复

我的问题就出在于此。我正在为我的每个加利福尼亚人创建动画,然后将这些动画放入nsarray中。一旦我收到单个动画已结束的回调,我就会将其从 NSArray 中删除。一旦它是空的,我再次为它们创建动画。

如果层数超过几层,所有动画完成和新动画开始之间就会出现明显的延迟。

我想,如果我可以将所有这些动画分组为一个动画,则可以对更多层进行动画处理,而动画之间不会出现延迟。从而不会破坏连续动画的幻想。

有帮助吗?

解决方案

如果您在单个方法中将动画附加到多个CALayers,它们将全部(有效地)同时开始。我在一个有落球的益智游戏中使用这种方法,在动画结束时我将动画的下一个阶段附加到需要进一步动画的任何球上。

我一次动画最多60个CALayers并且没有在动画的各个阶段之间遇到任何延迟,但是我没有将动画缓存到任何类型的数组中,我不确定你有那么多的开销

我的动画相对简单,并且可以动态创建并附加到每个CALayer。我的精灵是60像素正方形,并使用几十个可能的图像来表示他们的内容。

在某些情况下,我可以使用不同的开始时间(使用beginTime)创建多个动画,我将它们与CAAnimationGroup捆绑在一起 - 但您可能无法预先计算后续动画。

其他提示

如果您将动画包装在CATransaction中,CG将确保它们都在主循环的同一次迭代中运行。

[CATransaction begin]; //你的所有动画 [CATransaction commit];

如果您同时将3个动画添加到3个不同的图层,并且它们具有相同的持续时间,我希望它们一起动画。你看到了什么行为?

cp21哟:你能详细说明一下你的方法吗?我正在尝试做类似的事情,其中​​涉及一次不止一次地对多个图层进行动画处理。你说:“在动画的最后,我附上了动画的下一阶段”。你能解释一下吗?当我尝试在animationDidStop 事件中放入执行其他动画的逻辑时,仅发生最后一个动画,而不是整个动画序列。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top