2013-05-30 98 views
0

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

演示了如何使用显式动画以动画的一些属性,然后立即设置该层上的属性,以便当明确的动画完成,该物业的最终价值是正确的。

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

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

---更新---

所以我特别看到的问题是,我有一个动画来更改层的位置。它看起来基本上等同于苹果的示例代码

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

+0

你看到什么问题?如何(代码请)你添加动画? –

+0

用更多的信息更新了我的问题,谢谢 –

回答

1

在其他人遇到这种情况下,我的问题是两个动画被添加到我的图层。他们都动画职位属性,但他们有不同的ID,所以两个都在运行。

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

[CATransaction begin]; 
[CATransaction setDisableActions:YES]; 
theLayer.position = endValue; 
[CATransaction commit];