【问题标题】:Using Core Animation, is there a way to group animations for several CALayers?使用核心动画,有没有办法为几个 CALayers 分组动画?
【发布时间】:2010-09-29 22:12:25
【问题描述】:

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

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

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

已编辑以包含对 Kevin Ballard 问题的回复

我的问题就在于此。我正在为我的每个 CALayers 创建动画,然后放 NSArray 中的那些。一旦我得到单个动画结束的回调,我将它从 NSArray 中删除。一旦它为空,我再次为它们创建动画。

如果图层多于几层,则在所有动画完成与新动画开始之间存在明显的延迟。

我想,如果我可以将所有这些动画组合成一个动画,则可以在动画之间没有延迟的情况下制作更多层。从而不会破坏连续动画的错觉。

【问题讨论】:

    标签: animation core-animation


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      [CATransaction 开始]; // 你所有的动画 [CATransaction 提交];

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 我在主要问题中编辑了对您的查询的回复,因为它不适合这里。
        【解决方案4】:

        cp21yos:你能详细说明你的方法吗?我正在尝试做类似的事情,这涉及一次为多个图层设置动画,不止一次。你说:“在动画的最后,我附上下一阶段的动画”。你能解释一下吗?当我尝试在 animationDidStop 事件中添加执行附加动画的逻辑时,只会出现最后一个动画,而不是整个动画序列。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-16
          • 1970-01-01
          相关资源
          最近更新 更多