1

私は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 の変更が関係している場合にはお勧めできません。
4

1 に答える 1

-3

レイヤーに removeAllAnimations メッセージを送信することで、レイヤーのすべてのアニメーションを停止できます。

[sel.view removeAllAnimations];
于 2013-04-24T08:42:05.607 に答える