Snowflakeでは、ボタンや画像の一部にアニメーションを使用しています。
UIViweのアニメーションはかんたんに実装できて、見た目は少し凝った作りにできるので重宝します。
今回はそのUIViewアニメーションを使う時のTipsをご紹介します。
360°回転アニメーション
Snowflakeでは、Viewの画像を360°回転させるアニメーションを使用しています。
- (void)viewDidLoad { [super viewDidLoad]; /* いろんな処理 */ //アニメーション CABasicAnimation* rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; rotationAnimation.toValue = [NSNumber numberWithFloat:(M_PI / 180) * 360]; rotationAnimation.duration = 30.0f; rotationAnimation.repeatCount = HUGE_VALF; [_albumImageView.layer addAnimation:rotationAnimation forKey:@"rotateAnimation"]; [_cameraImageView.layer addAnimation:rotationAnimation forKey:@"rotateAnimation"]; }
このアニメーションについては、以下のサイト様を参考にさせて頂きました。
さて、このアニメーションですが、viewDidloadだけに実装すると初回起動時は動きますが、その後は止まってしまいます。
なぜか。
viewDidloadが実行されるのはアプリの初回起動時のみだからです。
いつでもアニメーションが実行されるようになるには、viewWillAppear等、他のメソッドにも同じようなアニメーションの処理を入れる必要があります。
どのイベントタイミングで、どのメソッドが呼ばれるのか。
詳しい内容は、以下のサイト様に書かれていますので、参考下さい。
iOS のイベント駆動をライフサイクルイベントとユーザアクションイベントにわけて理解する
止まらないアニメーションにする。
Snowflakeのアニメーション処理は、以下の2つのイベントで呼び出すようにしています。
・UIViewControllerのviewWillAppear (Viewの画面描画時に呼び出されるメソッド。画面が表示される度に実行される。)
・UIApplicationDelegateのapplicationWillEnterForeground (アプリがバックグラウンドから復帰される直前で呼び出されるメソッド。)
最初はviewWillAppearだけでいいかなと思うんですが、上記サイト様のイベントフロー図を見てもらえばわかる通り。
アプリ起動後にホームボタンを押してバックグラウンドとなり、そこからアイコンをタップされて復帰した場合、viewWillAppearメソッドは呼び出されません。
そのため、applicationWillEnterForegroundのタイミングでもアニメーション処理を行う必要があります。
この2つのメソッド内にアニメーションの処理を加える事で、いつでも動くアニメーションとなります。
コメント