3

ナビゲーションコントローラーを使用していて、新しいViewControllerがプッシュする前にアニメーションを実行しようとしています。これを行うために、UINavigationControllerデリゲートからイベントをキャッチし、アニメーションを実行しています。とは言うものの、明らかにiOSアニメーションは非同期で実行されることを意図しているため、メソッドが返され、私のアニメーションは標準のプッシュアニメーションと同時に実行されます。これを回避する方法について何か考えはありますか?

状況は次のようになります。

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (animated)
    {
        [UIView animateWithDuration:kGFDefaultAnimationDuration
                                      delay:0.0
                                    options:UIViewAnimationCurveEaseOut | UIViewAnimationOptionAllowUserInteraction
                                 animations:^{
                                     // Set up animations here...
                                 }
                                 completion:^(BOOL finished) {

                                 }];
    }
}

navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animatedつまり、完了ブロック内から戻りたいのです。

4

1 に答える 1

0

「イベント」とは何ですか?メソッドの場合は、[self method()]; として呼び出すことができます。「//ここでアニメーションを設定...」を最初に記述してから、ビューコントローラーを完了ブロックにプッシュします。または、単に UIView アニメーション コードを作成し、 を使用しsetAnimationDidStopSelectorてメソッドを設定し、View Controller をセレクターとしてプッシュすることもできます。ビューをデリゲートとして設定することも確認してください。[UIView setAnimationDelegate:self];そうすることで、ビューのプッシュはアニメーションの完了後にのみ発生します。また、アニメーションの継続時間がわかっているかどうかを調べて-(void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay、アニメーションが完了する数分の 1 秒前にプッシュ ビュー コントローラーを実行するように遅延を設定することもできます。最良の結果を得るために微調整してください。

于 2012-11-30T05:24:57.407 に答える