2012-08-24 63 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