0

kCATransitionFromRight を実行する 1 つと kCATransitionFromLeft を実行する 2 つの異なる CATranistion 関数 (私が作成した) のいずれかを呼び出す必要があります。完了したら、関数を結合します。

ただし、ナビゲーション スタックには 1 ビューの深さのビューがあります。スタックの上または下のビューからビューに入るか離れるかに応じて、左または右のいずれかを使用する必要があります。

First view => problem view, transition left.
Problem view => first view, transition right.

Problem view => third view, transition left.
Third view <= problem view, transition right.

現在、viewWillAppear で関数を呼び出しています。

ただし、使用する方向を関数に伝える方法がわかりません。

app デリゲート変数、singleton、または nsuserdefault 設定を使用できることはわかっていますが、考えもしなかったより適切なアプローチがあるかどうか疑問に思いました。

戻るボタンなどで関数を呼び出すことができることはわかっていますが、viewWillAppear 内での呼び出しはこれを上書きします。

+ (void)transitionFromRight:(UIViewController*)view {

    CATransition *navTransition = [CATransition animation];
    navTransition.duration = 0.65;
    navTransition.timingFunction = [CAMediaTimingFunction 
          functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    [navTransition setType:kCATransitionReveal];
    [navTransition setSubtype:kCATransitionFromRight];
    [view.navigationController.navigationBar.layer 
          addAnimation:navTransition forKey:nil];

}
4

1 に答える 1

2

を使用していると仮定しますUINavigationController

あなたが提案するオプションはどれも適切ではありません。それらはすべて、このようなものには必要ないグローバルデータアクセスポイントのアイデアの変形です。

より良い方法は次のとおりです。

などのデリゲートメソッドのいずれかを介して、新しいビューがナビゲーション スタックにプッシュ/ポップされていることを聞くことができUINavigationControllerDelegateます。適切なデリゲート メソッドで、カスタム UIViewController にプロパティを設定して、viewWillAppear などで使用するアニメーションを認識できるようにします。UINavigationController.navigationController:willShowViewController:animated:

于 2013-01-18T21:44:59.413 に答える