CALayer动画帧变化?

mar*_*ark 20 calayer ios

我有一个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];
Run Code Online (Sandbox Code Playgroud)

当我在更改myView的框架后尝试更改CALayer的框架时,CALayer的大小调整为动画.我没有给CALayer添加任何动画,所以我不明白这一点.我甚至试图在调整大小之前调用图层上的removeAllAnimations,它仍然可以调整resize的动画效果.

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

小智 40

实际上有一个隐式动画为CALayer设置一些值.您必须在设置新帧之前禁用动画.

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

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

[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)

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

  • Scotts是正确的,但替代第二行,您可以使用[CATransaction setDisableActions:YES]作为键值版本的简写.另外,请参阅核心动画指南中的"可动画属性".它特别提到默认情况下,可动画属性在简单值更改时使用隐式动画.http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/AnimProps.html (14认同)

JoG*_*oFo 6

在Swift 4中:

CATransaction.begin()
CATransaction.setDisableActions(true)
/* Your layer / frame changes here */
CATransaction.commit()
Run Code Online (Sandbox Code Playgroud)