0

这个苹果文档https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreAnimation_guide/CreatingBasicAnimations/CreatingBasicAnimations.html#//apple_ref/doc/uid/TP40004514-CH3-SW3

展示了如何使用显式动画为某些属性设置动画,然后立即在图层上设置该属性,以便在显式动画完成时,该属性的最终值是正确的。

但是,直接在图层上设置属性也会导致隐式动画。我觉得我在我的程序中看到了一个导致这种效果的错误,其中隐式和显式动画都在运行。

有人可以解释这是如何工作的吗?在示例代码中,设置显式动画时是否会忽略隐式动画?

- - 更新 - -

所以我特别看到的问题是我有一个动画来改变图层的位置。它看起来与苹果示例代码基本相同

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 示例代码中的“不透明度”),并且第二个设置隐式动画,为什么那个不胜出?

4

1 回答 1

1

在其他人遇到的关闭更改中,我的问题是两个动画被添加到我的图层中。它们都在为 position 属性设置动画,但它们的 ID 不同,所以它们都在运行。

我通过将隐式动画包装在关闭操作的事务中解决了我的问题。

[CATransaction begin];
[CATransaction setDisableActions:YES];
theLayer.position = endValue;
[CATransaction commit];
于 2013-05-31T19:49:55.137 回答