如何在 iOS 中创建具有更好性能的复杂动画?
How to create complex animation with better performance in iOS?
所有动画都意味着 layer.transform
或 frame
属性的变化。关于性能有两个主要问题:
我有多个视图需要同时设置动画。哪个更好:创建多个 animateWithDuration
块或创建一个这样的块并在其中迭代视图?
我的动画需要复杂的计算,我需要足够频繁地调用 animateWithDuration
。我应该在动画块之前执行所有计算还是性能没有差异?
还没有人回答。所以让我回答我自己的问题,如果我错了你会纠正它。
我只推荐一个街区。通常的 animateWithDuration:animations:
不能正确支持同步动画(至少在我的情况下它造成了一些麻烦)。我建议改用 RZViewActions - 它使用更复杂的方法 dispatch_group_t
来同步动画(和一般动作)。在上一个版本中你甚至不需要在动画开始前准备groups/sequences。
我看到的唯一区别是 animateWithDuration:animations:
之外的代码是在同一个 NSRunLoop
循环中执行的,如果我将它放在动画块中,它将在下一个周期。因此,例如,如果有时您不想根据这些计算的结果开始动画,那么将计算放在块外会很有用。
另一方面,它可能会减慢当前周期,这通常比下一个周期的性能下降更为关键。此外,您应该考虑需要正确传递到块中的变量。
在这两种情况下,动画直到动画块结束时才会开始。因此,如果您设置了一些视觉变量(例如,视图的框架),它会像往常一样设置,您可以立即使用它。但是这个值直到完成块的开始才会呈现。所以你使用 animateWithDuration:animations:
你只会看到起始值和结束值。即使动画被中断,它也会立即跳转到结束值(如果您不指定其他选项,这是默认行为)。
所有动画都意味着 layer.transform
或 frame
属性的变化。关于性能有两个主要问题:
我有多个视图需要同时设置动画。哪个更好:创建多个
animateWithDuration
块或创建一个这样的块并在其中迭代视图?我的动画需要复杂的计算,我需要足够频繁地调用
animateWithDuration
。我应该在动画块之前执行所有计算还是性能没有差异?
还没有人回答。所以让我回答我自己的问题,如果我错了你会纠正它。
我只推荐一个街区。通常的
animateWithDuration:animations:
不能正确支持同步动画(至少在我的情况下它造成了一些麻烦)。我建议改用 RZViewActions - 它使用更复杂的方法dispatch_group_t
来同步动画(和一般动作)。在上一个版本中你甚至不需要在动画开始前准备groups/sequences。我看到的唯一区别是
animateWithDuration:animations:
之外的代码是在同一个NSRunLoop
循环中执行的,如果我将它放在动画块中,它将在下一个周期。因此,例如,如果有时您不想根据这些计算的结果开始动画,那么将计算放在块外会很有用。另一方面,它可能会减慢当前周期,这通常比下一个周期的性能下降更为关键。此外,您应该考虑需要正确传递到块中的变量。
在这两种情况下,动画直到动画块结束时才会开始。因此,如果您设置了一些视觉变量(例如,视图的框架),它会像往常一样设置,您可以立即使用它。但是这个值直到完成块的开始才会呈现。所以你使用
animateWithDuration:animations:
你只会看到起始值和结束值。即使动画被中断,它也会立即跳转到结束值(如果您不指定其他选项,这是默认行为)。