はじめに
(良いタイトルが思い浮かばなかったので、長くなりました。。)
最近身の回りがやけに慌ただしいので、さっぱり記事が書けていない、ゆう@あんのうんです。 1日が48時間あれば良いのに…。
UIViewのAnimationについて
さて、今回はQiitaの方にも投稿させて頂いた、UIViewのAnimationについての記事です。 UIViewでAnimationをさせる方法の一つに、タイトル通りの、[UIView beginAnimations:context]があるのですが、Animation終了時等に、オブジェクトを渡して何かしたいと言うのがママあります。 そんな時、@property等に指定するのも良いのですが、contextにオブジェクトを代入してやり取り等できる方法があるので、その紹介です。
実際にbeginAnimations:contextは
+ (void)beginAnimations:(NSString *)animationID context:(void *)context
とcontextはvoid*型になっているので何でも渡せるようになっています。 以下は、contextを用いてユーザ情報を渡すSampleです。
// beginAnimations:context sample - (void)animationStart { NSDictionary *userInfo = @{@"key":@"val"}; [UIView beginAnimations:@"animation" context:(__bridge_retained void*)(userInfo)]; [UIView setAnimationDelegate:self]; [UIView setAnimationDuration:0.27f]; [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)]; /* animation処理 */ [UIView commitAnimations]; }
次にAnimationが終了した際に呼ばれるメソッドの中身で、実際にcontextを受け取り解釈します。
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { NSDictionary *contextObj = (__bridge_transfer NSDictionary*)context; NSLog(@"%@", contextObj[@"key"]); }
実行結果
val
勘違いし易いのが(私も最初はそうでした)、beginAnimationsはグラフィックスコンテキストではありません。 上述の通り、アニメーションのデリゲートメソッドで受け取り、その後の条件判定用にユーザが好きに指定するものです。