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添加任何动画,所以我不明白这一点。 我甚至试图在resize之前调用图层上的removeAllAnimations,它仍然可以调整resize的动画效果。

有谁知道这里会发生什么?

实际上有一个隐式动画为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

在Swift 4中:

 CATransaction.begin() CATransaction.setDisableActions(true) /* Your layer / frame changes here */ CATransaction.commit()