私はiOSアニメーションにはあまり興味がありません。私が達成しようとしているのは、画面の下部から特定の y まで垂直にスライドし、数瞬間後に UIView が垂直にロールバックして画面から消える単純なメッセージ ビューです。
[UIView animateWithDuration:0.5f
animations:^{
self.messageView.frame=CGRectMake(x, y -80, width, height);
}
completion:^(BOOL finished){
if (finished) {
[UIView animateWithDuration:0.5f delay:2.0f options:UIViewAnimationOptionCurveLinear
animations:^{
self.messageView.frame=CGRectMake(x, y + 80, width, height);
}
completion:^(BOOL finished){
// do something...
}
];
}
} ];
これは正常に動作していますが、iOS UITabBar アプリケーションでこのメカニズムを使用すると問題が発生します。タブを変更すると、アニメーションが停止し、実際には「終了」完了が「false」であることがわかります。したがって、2 番目のブロックは呼び出されず、メッセージ ビューはオンのままになります。
質問は次のとおりです。
- 私の最初の関心事は、ネストされたアニメーションに関して、私が書いたコードが正しいかどうかを理解することです。
- とにかく「終了」を無視してコードを実行することで解決できましたが、それは良い考えではないと思います
- 最後の完了ブロック内に、いくつかのプログラミング ロジックを配置しました。基本的に、いくつかの UIButtons 状態を復元し、その他の小さな UI 変更をいくつか行います。現時点では、それが良いアイデアかどうかはわかりませんが、そうではないようですが、メッセージ ビューが消えたことを UI に知らせるにはどうすればよいでしょうか。NSNotification と KVO は、応答性の高い UI の変更が関係している場合にはお勧めできません。