24

我有一个添加到视图中的 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,它仍然会为调整大小设置动画。

有人知道这里会发生什么吗?

4

2 回答 2

43

实际上有一个关于为 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

于 2012-08-29T02:28:44.227 回答
10

在 Swift 4 中:

CATransaction.begin()
CATransaction.setDisableActions(true)
/* Your layer / frame changes here */
CATransaction.commit()
于 2018-03-23T14:43:20.653 回答