360°の回転アニメーションを作る

| コメント(0) | トラックバック(0)
こんにちは。開発担当のICTFです。

[UIView animateWithDuration:0.2 animations:^(void) {}];

を使って360°の回転アニメーションを作る場合、素直に書くと次のようになります。

[UIView animateWithDuration:0.2 animations:^(void) {

    CGAffineTransform positiveRotate = CGAffineTransformMakeRotation(360 * (M_PI / 180.0));

    view.transformpositiveRotate;

}];


ですがこのコードを動かすと、実際はまったく動かないのをご存知でしょうか。
360°はつまり0°と同じですので、最初から目的の度数であると判断される為です。
この現象を回避するため、また回転の方向を制御する為に90°の回転アニメーションを4回に分けて行なうなど面倒な処理が必要になります。

animateWithDuration: animations:で実装に苦労する360°回転処理ですが、実はCABasicAnimationを使う事で比較的簡単に実装ができます。

CABasicAnimation* rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];

rotationAnimation.toValue = [NSNumber numberWithFloat:(M_PI / 180) * 360];

rotationAnimation.duration = 30.0f;

rotationAnimation.repeatCount = HUGE_VALF;

[view.layer addAnimation:rotationAnimation forKey:@"rotateAnimation"];


toValueに回転する度数を、durationにアニメーションが完了するまでの時間を、repeatCountに繰り返す回数を設定します。
HUGE_VALFを設定する事で無制限の繰り返しにする事も可能です。
上記コードでは時計回りに回転しますが、反時計回りにしたい場合はtoValueにマイナスの値を設定して下さい。

CABasicAnimationを使う際の注意点ですが、画面の切り替わりやアプリの切り替わりでアニメーションがクリアされます。
画面を戻した時に継続してアニメーションを行ないたい場合、viewWillAppear:やapplicationWillEnterForeground:がコールされるタイミングで再度アニメーションの設定を行なう必要があります。

トラックバック(0)

トラックバックURL: http://www.ict-fractal.com/MovableType/mt/mt-tb.cgi/48

コメントする

Twitterボタン
Twitterブログパーツ