4

私は、2つの異なるアクティブモーダルビューコントローラを切り替えて、滑らかなアニメーションを試しています。理想的には、新しいモーダルビューが現在のモーダルビュー上でモーダルビューになっているように、アニメーションを表示することができます。2つのモーダルViewController間のアニメーション化された遷移

私のアプリケーション全体で一貫性を保つために、常に表示されるモーダルビューコントローラの1つのレイヤだけを制限する必要があります。

現在のところ、私は既存のモーダルビューをアニメーションなしで閉じて、次のモーダルビューをRootControllerでアニメーション表示しますが、これはうまくありません。

おかげ

答えて

7

あなただけのデフォルトのトランジションを使用して、最初の上に第二のモデル・ビュー・コントローラを提示することができます。 2番目のモデルビューが最初のモデルビューと同じビューコントローラで割り当てられ、初期化されているようです。このような場合は、コードをリファクタリングして、最初のモデルビューコントローラに2番目のモーダルビューコントローラを表示させるようにしてください。これを行うと、あなたが好きなようにもう一方の上に表示されます。

両方のモーダルビューコントローラを同じルートビューコントローラに表示するためのコードを保持する必要がある場合は、デリゲートメソッドを作成できます。これは、最初のモーダルビューコントローラから、それを提示したルートビューコントローラにメッセージを送り、最初のモーダルビューコントローラへの参照を渡します。次に、このリファレンスを使用して、最初のモーダルビューコントローラに2番目のモーダルビューコントローラを表示するように指示します。

以前のソリューションを推奨したいと思いますが、論理的には明確で、保持サイクルを導入する可能性は低いです。あなたの明確化に対応して

、両者の間に移行しようとする:

をすでに前のセッションから表示され、あなたのModalViewControllerOne例では:あなたのrootViewControllerの-viewDidAppear:

self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self dismissModalViewControllerAnimated:YES]; 

この考え方は、最初のモーダルビューコントローラをルートビューコントローラにクロスディゾルブし、直ちに新しいモーダルビューコントローラをスクリーンにクロスディゾルブすることです。

スプラッシュ画面で異なるビューの場合は、2つのビューコントローラの代わりに、ロジックを持つビューコントローラを1つだけ表示し、入力されたURLに応じて一方のビューをもう一方のビューに置き換えてアニメーションを使用できますビュー間をスワップするとき。

+0

これらのモーダルディスプレイは、本質的に異なるスプラッシュ/ログイン画面です。アプリの入力に使用されるURLに応じて、私は別のモーダルスプラッシュを表示します。だから、もしスプラッシュ1が以前のアプリケーションの使用から立ち上がって、スプラッシュ2を要求するURLからアプリを入力したら、スプラッシュ1からスプラッシュ2へのスムーズな移行を、両方を上にせずにしたいと思います。 – FishStix

+0

あなたのために私の答えを更新しました。 – Andrew

+0

私はただ1つのUINavigationControllerを "modalController"として追跡し、ViewControllersのスタックを1つのデリゲートメソッドに渡し、window.rootControllerに "presentController"がある場合はmodalControllerを表示し、viewControllersをアニメーションに置き換えます。さもなければ、私はまだmodalControllerのビューコントローラと呼び出しウィンドウを設定します。rootController presentModalViewController:modalController – FishStix

関連する問題