Rhythm & Biology

Engineering, Science, et al.

CALayerのアニメーションを一時的に無効にする方法

CALayerはプロパティを変更した際に、いい感じにアニメーションをつけてくれます。特に手を入れることなくちょっとだけリッチな感じにすることができるのですが、逆にアニメーションさせたくないときもあるはずです。

これはCATransactionを使えば簡単に解決できます。

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue
                            forKey:kCATransactionDisableActions];
layer.frame = CGRectMake(x, y, w, h);
[CATransaction commit];

beginとcommitの間に書かれたプロパティの変更に関してはアニメーションが無効になります。例では1つのCALayerのプロパティのみを変更していますが、複数まとめて書くことも可能です。