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 に答える