これから,アニメーションについて書いたプログラムをだらだら載せます.
研究して下さい.
// アニメーションを書きますよー
// ↓引数はそれぞれnil nil でもいいけど,ここでは与えてみました.どうなるかはお楽しみ
[UIView beginAnimations:@"AnimationTest" context:(__bridge void *)([NSNumber numberWithBool:YES])];
// デリゲートの設定
[UIView setAnimationDelegate:self];
// セレクターの設定(デリゲートの指定してるから,別にやらなくてもいい気がするのですが...この辺りはまだ分かっていません)
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
// アニメーションのスピードの変化の設定.例えば,等速でアニメーションするとか
[UIView setAnimationCurve:ANIMATIONCURVE];
// アニメーションをする時間の設定
[UIView setAnimationDuration:ANIMATIONDURATION];
/*
* ここに最終的にどんなUIViewの配置にするかを決める
* それにむけてアニメーションしてくれる,優秀ですね.
*
* 例えば,ViewのFrameを変えてみましょう
*/
CGRect newFrame = CGRectMake(100, 100, 100, 100);
[self.animationView setFrame:newFrame];
// 実行
[UIView commitAnimations];
// ↓引数はそれぞれnil nil でもいいけど,ここでは与えてみました.どうなるかはお楽しみ
[UIView beginAnimations:@"AnimationTest" context:(__bridge void *)([NSNumber numberWithBool:YES])];
// デリゲートの設定
[UIView setAnimationDelegate:self];
// セレクターの設定(デリゲートの指定してるから,別にやらなくてもいい気がするのですが...この辺りはまだ分かっていません)
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
// アニメーションのスピードの変化の設定.例えば,等速でアニメーションするとか
[UIView setAnimationCurve:ANIMATIONCURVE];
// アニメーションをする時間の設定
[UIView setAnimationDuration:ANIMATIONDURATION];
/*
* ここに最終的にどんなUIViewの配置にするかを決める
* それにむけてアニメーションしてくれる,優秀ですね.
*
* 例えば,ViewのFrameを変えてみましょう
*/
CGRect newFrame = CGRectMake(100, 100, 100, 100);
[self.animationView setFrame:newFrame];
// 実行
[UIView commitAnimations];
さて,大きくコメントをした箇所がありますよね.
そこに,アニメーション後にどういう配置にしたいかを書くことで,
設定した,アニメーションの仕方で動いてくれます.
本当に優秀です.
さて,上記のコード中に「ANIMATIONCURVE」「ANIMATIONDURATION」というものがありますね.
ANIMATIONDURATINOはCGFloatの値を指定してください.
例えば,1.0を指定すると,1秒でアニメーションが完了します.
次にANIMATIONCURVEの所ですが,与えることのできる引数は以下の通りです.
UIViewAnimationCurveEaseIn
UIViewAnimationCurveEaseInOut
UIViewAnimationCurveEaseOut
UIViewAnimationCurveLinear
UIViewAnimationCurveEaseInOut
UIViewAnimationCurveEaseOut
UIViewAnimationCurveLinear
それぞれ試してみてください.
次に,アニメーションが完了したことを通知する関数をみていきます.
#pragma mark - UIViewAnimationDelegate
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context{
NSNumber *flag = (__bridge NSNumber *)context;
NSLog(@"%@ ,%@, %@", animationID, finished, [flag boolValue] ? @"YES" : @"NO");
}
実行結果は以下のようになります.
2012-09-28 11:02:08.598 AnimationTest[1633:c07] AnimatoinTest ,1, YES
beginAnimationsで設定した引数がちゃんと渡されていることが分かりますね.
contextの設定の仕方が若干難しいですが,慣れれば簡単にできます.
引数の値によってアニメーション後の処理を変化させればいいですね.
Animationについては奥が深いですので,もう少し続きます.
次の記事へ
HOMEに戻る