2012-08-24 64 views
15

我有一個CALayer的我已經添加到我的觀點:CALayer動畫與框架更改?

myView.myCALayer = [[CALayer alloc] init]; 
CGSize size = myView.frame.size; 
myView.myCALayer.frame = CGRectMake(0, 0, size.width, size.height); 
myView.myCALayer.backgroundColor = [[UIColor blackColor] CGColor]; 
[myView.layer addSublayer:myView.myCALayer]; 

當我試圖改變MyView的的框架後改變的CALayer的框架中,CALayer的的縮放動畫。我沒有給CALayer添加動畫,所以我不明白這一點。我甚至試圖在調整大小之前調用層上的removeAllAnimations,並且它仍然調整了調整大小的動畫。

任何人都知道這裏會發生什麼?

回答

34

實際上有一個爲CALayer設置一些值的隱式動畫。在設置新框架之前,您必須禁用動畫。

[CATransaction begin]; 
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 

[myView.myCALayer.frame = (CGRect){ { 10, 10 }, { 100, 100 } ]; 

[CATransaction commit]; 

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/AdvancedAnimationTricks/AdvancedAnimationTricks.html#//apple_ref/doc/uid/TP40004514-CH8-SW3

+14

斯科茨右,但可替換到第二線路可以使用[CATransaction setDisableActions:YES]作爲短手鍵值版本。另外,請參閱Core Animation Guide中的「動畫屬性」。它特別提到了默認情況下哪些動畫屬性對簡單值更改使用隱式動畫。 http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/AnimProps.html – Bobjt