如何在iOS中创建具有更好性能的复杂动画?

时间:2015-06-09 10:17:21

标签: ios animation frame catransform3d animatewithduration

所有动画都意味着layer.transformframe属性的更改。关于绩效有两个主要问题:

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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