【问题标题】:How to create complex animation with better performance in iOS?如何在 iOS 中创建性能更好的复杂动画?
【发布时间】:2015-08-24 02:30:40
【问题描述】:

所有的动画都意味着layer.transformframe 属性的变化。关于性能有两个主要问题:

  1. 我有多个视图,我应该同时制作动画。更好的是:创建多个animateWithDuration 块还是创建一个这样的块并在其中迭代视图?

  2. 我的动画需要复杂的计算,我需要经常调用animateWithDuration。我应该在动画块之前执行所有计算还是没有性能差异?

【问题讨论】:

    标签: ios animation frame catransform3d animatewithduration


    【解决方案1】:

    还没有人回答。所以让我回答我自己的问题,如果我弄错了,你会纠正它。

    1. 我只推荐一个块。通常的animateWithDuration:animations: 不能正确支持同步动画(至少在我的情况下它造成了一些麻烦)。我建议改用RZViewActions - 它使用更复杂的方法和dispatch_group_t 来同步动画(以及一般的动作)。在上一个版本中,您甚至不需要在动画开始之前准备组/序列。

    2. 我看到的唯一区别是animateWithDuration:animations: 之外的代码在同一个NSRunLoop 循环中执行,如果我将它放在动画块内,它将在下一个循环中计算。因此,例如,如果有时您不想根据这些计算的结果启动动画,那么将计算放在块之外会很有用。

      另一方面,它可能会减慢当前周期,这通常比下一个周期的较慢性能更为关键。此外,您应该考虑需要正确传递到块中的变量。

      在这两种情况下,动画直到动画块结束才会开始。因此,如果您设置了一些视觉变量(例如,视图的框架),它会像往常一样设置,您可以立即使用它。但是这个值直到完成块的开始才会呈现。所以你使用animateWithDuration:animations: 你只会看到开始和结束的值。即使动画被中断,它也会立即跳转到结束值(如果您不指定其他选项,这是默认行为)。

    【讨论】:

    • 好的。投反对票的人 - 我的回答有什么问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 2014-03-28
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多