[解決済み] animationDidStopデリゲート内でCAAnimationを識別する方法とは?
質問
私は、オーバーラップする一連のCATransition / CAAnimationシーケンスを持っていて、アニメーションが停止したときにカスタム処理を実行する必要があるのですが、animationDidStopのためのデリゲートハンドラは1つだけ欲しいという問題がありました。
しかし、問題がありました。animationDidStopデリゲートにおいて、それぞれのCATransition / CAAnimationを一意に識別する方法がないように思われたのです。
私は、CAAnimationの一部として公開されたキー/値システムによって、この問題を解決しました。
アニメーションを開始するとき、CATransition / CAAnimationのsetValueメソッドを使用して、identifierと値を設定し、animationDidStopが発生したときに使用するようにします。
-(void)volumeControlFadeToOrange
{
CATransition* volumeControlAnimation = [CATransition animation];
[volumeControlAnimation setType:kCATransitionFade];
[volumeControlAnimation setSubtype:kCATransitionFromTop];
[volumeControlAnimation setDelegate:self];
[volumeControlLevel setBackgroundImage:[UIImage imageNamed:@"SpecialVolume1.png"] forState:UIControlStateNormal];
volumeControlLevel.enabled = true;
[volumeControlAnimation setDuration:0.7];
[volumeControlAnimation setValue:@"Special1" forKey:@"MyAnimationType"];
[[volumeControlLevel layer] addAnimation:volumeControlAnimation forKey:nil];
}
- (void)throbUp
{
doThrobUp = true;
CATransition *animation = [CATransition animation];
[animation setType:kCATransitionFade];
[animation setSubtype:kCATransitionFromTop];
[animation setDelegate:self];
[hearingAidHalo setBackgroundImage:[UIImage imageNamed:@"m13_grayglow.png"] forState:UIControlStateNormal];
[animation setDuration:2.0];
[animation setValue:@"Throb" forKey:@"MyAnimationType"];
[[hearingAidHalo layer] addAnimation:animation forKey:nil];
}
animationDidStopデリゲートで。
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag{
NSString* value = [theAnimation valueForKey:@"MyAnimationType"];
if ([value isEqualToString:@"Throb"])
{
//... Your code here ...
return;
}
if ([value isEqualToString:@"Special1"])
{
//... Your code here ...
return;
}
//Add any future keyed animation operations when the animations are stopped.
}
もう一つの側面は、デリゲートクラスに状態を保存する必要がなく、キーと値のペアリング方式で状態を保持できることです。コードが少なければ少ないほど良い。
を必ずチェックしてください。 Apple Reference on Key Value Pair Codingをご覧ください。 .
animationDidStopデリゲートでCAAnimation / CATransitionを識別するためのより良いテクニックはありますか?
ありがとうございます。 --Batgar
どのように解決するのですか?
Batgarのテクニックは複雑すぎる。なぜ addAnimation の forKey パラメータを利用しないのでしょうか。それはまさにこの目的のために意図されたものです。setValueの呼び出しを取り除き、キー文字列をaddAnimationの呼び出しに移動させるだけです。たとえば
[[hearingAidHalo layer] addAnimation:animation forKey:@"Throb"];
そして、animationDidStopコールバックで、次のようなことをします。
if (theAnimation == [[hearingAidHalo layer] animationForKey:@"Throb"]) ...
関連
-
[解決済み] 私のアプリケーションは「暗号を含む」のでしょうか?
-
[解決済み】「推奨アイコンファイルがありません - バンドルには、ちょうど「120x120」ピクセル、.png 形式の iPhone / iPod Touch 用のアプリアイコンが含まれていません。
-
[解決済み] iPhone Safari ウェブアプリでリンクを新しいウィンドウで開く
-
[解決済み] エラー : サービスは無効です
-
[解決済み] リンカーフラグ -ObjC は何をするのですか?
-
[解決済み] UIViewのサブビューをセンタリングする方法
-
[解決済み] iPhoneのSafariで<body>に適用したoverflow:hiddenは機能するのか?
-
[解決済み] UIScrollViewをコンテンツに合わせて自動サイズ調整する方法
-
[解決済み] Objective-Cのプロトコルでプロパティを含むものはどう扱えばいいのか?
-
[解決済み] AppDelegate.mで画面上に現在表示されているUIViewControllerを取得する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] UIScrollViewでスクロールの方向を見つける?
-
[解決済み] iPhoneのシミュレータに.ipaファイルをインストールする方法は?
-
[解決済み] UITableViewCellのサブビューがセルを選択すると消えてしまう
-
[解決済み] iOS UITableViewのHeaderView(セクションヘッダーではない)を追加する
-
[解決済み] UITableViewHeaderFooterView。背景色を変更できない
-
[解決済み] drawRectを使うか使わないか(drawRect/Core Graphicsとsubview/imagesをいつ使うか、なぜ使うか)?
-
[解決済み] CALayer setNeedsDisplayInRect:] の暗黙のアニメーションを無効にする。
-
[解決済み] オプションのメソッドを持つプロトコルを作成するには?
-
[解決済み] Objective-Cのプロトコルでプロパティを含むものはどう扱えばいいのか?
-
[解決済み] カメラロールに画像を保存する方法を教えてください。