2013-04-22 48 views
5

我使用CABasicAnimation對CALayer進行了動畫處理,並期望在動畫完成時圖層保持原位。幾乎所有的解決方案顯示了以下內容,工作正常正確的方法來防止CABasicAnimation中的消失層?

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

然而,2010年的WWDC揚聲器的核心動畫實踐第一部分(〜38-41mins)指出,一般的解決方案,以發現消失層的是「假的」,並以動畫層的正確方法大致如下

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

給出的理由是,removedOnCompletion /在fillMode解決方案只凍結了表示層,實際層仍然有其原來的位置上。

如果我誤解了說話者,請糾正我。

如果我正確地理解了他,它什麼時候重要?

謝謝,史蒂夫

回答

2

這取決於你想要做什麼...你自己的解釋似乎很清楚。

如果您只是在不更改實際值的情況下對屬性進行動畫處理,那麼「您看到的」實際上與「什麼是」不同。大多數情況下,你不需要這個。 (並且,當您使用UIView動畫或CALayer隱式動畫時,「什麼是」和「你看到的是什麼」被同步,這與直接設置器語法一致)。

但是在某些情況下,保留實際值並在屏幕上暫時顯示不同的東西會很有用......只要您知道自己在做什麼!

+0

感謝您的迴應 - 抱歉我的這裏有點慢。我可能從來沒有遇到需要做更多的表現層或實際層,這就是爲什麼我與這兩種方法掙扎。再次感謝。史蒂夫 – Steve 2013-04-24 16:37:17

1

你明白吧。

這意味着,當您在圖層上進行動畫時,會創建一個名爲「表示層」的「特殊」圖層,並在其上實際發生動畫,但實際圖層不會更改。事實上,您必須將屬性設置爲動畫結尾處的圖層,以將該圖層與最終動畫狀態「同步」。