展示了如何使用显式动画为某些属性设置动画,然后立即在图层上设置该属性,以便在显式动画完成时,该属性的最终值是正确的。
但是,直接在图层上设置属性也会导致隐式动画。我觉得我在我的程序中看到了一个导致这种效果的错误,其中隐式和显式动画都在运行。
有人可以解释这是如何工作的吗?在示例代码中,设置显式动画时是否会忽略隐式动画?
- - 更新 - -
所以我特别看到的问题是我有一个动画来改变图层的位置。它看起来与苹果示例代码基本相同
CABasicAnimation* fadeAnim = [CABasicAnimation animationWithKeyPath:@"position"];
anim.fromValue = startValue;
anim.toValue = endValue;
anim.duration = 1.0;
[theLayer addAnimation:anim forKey:@"myAnimation"];
// Change the actual data value in the layer to the final value.
position.position = endValue; // As a CGPoint
我观察到的故障首先是我看到位置变化很快(我猜是隐式动画),然后变慢了(这是我的动画)。
我刚刚注意到在我的代码中有所不同的一件事是,我给我的显式动画的 ID 是“myAnimation”,而不是“位置”。但这引出了另一个问题,如果您给两个动画提供相同的 ID(Apple 示例代码中的“不透明度”),并且第二个设置隐式动画,为什么那个不胜出?