究竟removeOnCompletion = NO究竟做了什么?

时间:2011-01-20 12:43:35

标签: iphone ios core-animation

CAAnimation提供removedOnCompletion属性,默认为YES。

让我们认识到这些事实:

A)核心动画仅影响表示树,但不影响模型树。完成动画后,您最终会看到模型树中设置的内容。例如,您可以将fillMode设置为kCAFillModeBoth,一旦动画完成,它将把表示树中的值交换到模型树。这会导致您的动画无法恢复(这很可能是您想要的)。

B)我做了一个实验。 removedOnCompletion = NO NOT 与kCAFillModeBoth或kCAFillModeForwards具有相同的效果。更确切地说:完成动画时结果的效果绝对没有影响。无论它是否被“移除”,它似乎都不会影响演示树。

为了解释removeOnCompletion真正做了什么,文档在这方面太弱了。我不明白。任何人都可以解释究竟会删除什么,以及没有删除它的好处是什么?

我的猜测是Apple正在谈论动画师对象本身,它使用-addAnimation添加到图层:forKey:...但是又一次:保持它的重点是什么?

4 个答案:

答案 0 :(得分:13)

如果removedOnCompletion为YES,则动画将在完成时删除,并且根本没有任何“填充”。因此,如果您想使用fillMode,则必须将removedOnCompletion设置为NO

答案 1 :(得分:12)

removedOnCompletion

基本上,当动画完成时,动画是从图层的动作中移除的。

YES - 如果您打算只使用一次动画,则完成后无需使用委托方法从图层中删除动画。

fillMode

此属性控制动画完成时视觉上发生的情况,具体取决于指定的填充模式类型。

答案 2 :(得分:0)

视图的表示层即使停止也会受到动画的影响。删除动画时,表示层将恢复为视图模型层的值,因此您将得到一个指向的结果。

答案 3 :(得分:0)

removedOnCompletion = YES确实只是一个捷径。在大多数情况下,我不鼓励使用它,而是设置模型值。

虽然您没有使用它们,但仍然流连忘返的动画可能会消耗能量和带宽,并弄乱您的逻辑,因为您无法再检查animationKeys来轮询(是否需要)它们是否已经完成了。