2012-02-17 44 views
1

我正在嘗試CAAnimation,並且像許多新進來的人一樣進行CAAnimation;完成後,圖層將恢復到原始狀態。CAAnimation,對齊

如何解決這個問題在這裏問了很多次,答案是將下面的代碼添加到您的CAAnimation中。

animation.removedOnCompletion = NO; 

雖然這個工作,但按照蘋果的WWDC視頻討論CAAnimation,建議的解決辦法是:

// animating opacity 
layer.opacity = newOpacityValue; 
[layer addAnimation:animation forKey:@"opacity"]; 

所以我想知道是什麼這兩個時的主要區別使用它們?

+0

@Till我的意思是addAnimation:動畫,更正了源代碼。 – meiwin 2012-02-17 16:06:52

+0

另請參閱https://oleb.net/blog/2012/11/prevent-caanimation-snap-back/ – 2016-12-15 09:19:23

回答

12

顯式動畫實際上並不修改CALayer的屬性。

他們只是修改presentationLayer,這是你真正看到的。動畫完成後,您將看到CALayer與動畫之前的完全相同。

通過設置這樣

// animating opacity 
layer.opacity = newOpacityValue; 
[layer addAnimation:animation forKey:@"opacity"]; 

值您確保動畫的值存儲在模型中,因此您的更改將生活在即使在動畫從層去除。

使用removedOnCompletion = YES不是一個持久的解決方案。每當您從圖層中刪除動畫時,它都會恢復爲舊狀態。

4

您不需要「removedOnCompletion」標誌。

您需要將不透明度設置爲動畫外部的新值 - 就像第二個示例一樣。

使用「removedOnCompletion」不會釋放您的動畫對象 - 如果您有很多動畫,則會炸燬您的內存。

CABasicAnimation *animation=[CABasicAnimation animationWithKeyPath:@"opacity"]; 
animation.fromValue=[NSNumber numberWithFloat:0]; 
animation.toValue=[NSNumber numberWithFloat:1]; 

layer.opacity=1; // this line will make sure the opacity will stay 1 when the animation is completed 
[layer addAnimation:animation forKey:@"opacity"]; 
+0

現在,這是有道理的,謝謝你的答案! – meiwin 2012-02-17 16:16:06

+0

等等,當我這樣做時,屬性會立即變爲1,並且不會生成動畫。我錯過了什麼嗎? – jab 2013-03-08 06:43:36

+0

@jab,您需要添加動畫持續時間(animation.duration = 3;) – 2013-04-06 23:40:35