2012-08-24 15 views
15

私は私が私の見解に追加したCALayerの持っている:私はMYVIEWのフレームを変更した後の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]; 

、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]使用可能な第2ラインへの代替キーと値のバージョンに限り短い手を。さらに、「Core Animation Guide」の「Animatable Properties」を参照してください。具体的には、どのアニメーション化可能なプロパティがデフォルトで単純な値の変更に対して暗黙的なアニメーションを使用するかを記述しています。 http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/AnimProps.html – Bobjt

関連する問題