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

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

让我们认识到这些事实:

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

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

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

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

removedOnCompletion

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

YES – 如果您只想使用动画一次,则不需要使用委托方法在完成时从图层中删除动画。

fillMode

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

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

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