5

我正在使用 CABasicAnimation 为 CALayer 设置动画,并希望在动画完成时图层保持在原位。几乎所有解决方案都显示以下内容,效果很好

animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;

然而,2010 年 WWDC 演讲者在 Core Animation in Practice Part 1 (~38-41mins) 中说,大多数关于消失层的解决方案都是“伪造的”,而为层设置动画的正确方法大致如下

animation.fromValue = [NSNumber numberWithFloat:layer.position.y];
layer.position = CGPointMake(layer.position.y, endPoint); 
animation.toValue = [NSNumber numberWithFloat:endPoint];

给出的原因是removedOnCompletion/fillMode解决方案只冻结了表示层,而实际层仍然有它原来的位置设置。

如果我误解了演讲者,请纠正我。

如果我对他的理解正确,什么时候有关系?

谢谢,史蒂夫

4

2 回答 2

2

这取决于你想做什么......你自己的解释似乎很清楚。

如果您只为属性设置动画而不更改实际值,那么“您所看到的”实际上与“是什么”不同。大多数时候,你不希望这样。(而且当你使用UIView动画,或者CALayer隐式动画的时候,“what is”和“what you see”是同步的,这和直接setter语法是一致的)。

但在某些情况下,保留实际值并在屏幕上临时显示不同的内容会很有用……只要您知道自己在做什么!

于 2013-04-22T16:18:07.193 回答
1

你理解的没错。

这意味着当您在图层上制作动画时,会创建一个称为“表示层”的“特殊”图层,并且动画实际上发生在其上,但实际图层并未更改。实际上,您必须在动画结束时将属性设置为图层,以使图层与最终动画状态“同步”。

于 2013-04-22T16:09:54.277 回答