最良の方法には、ダイアログ コードのリファクタリングが含まれる場合があります (注: ここで最良の方法を提示するとは主張していません。議論の原因となるため、最良の方法を尋ねるべきではありません)。モーダル ダイアログは、長く使い続けることを意図したものではありません。ユーザーが難易度を選択できるようにしてから、ゲームのダイアログを非表示にします。ゲーム オーバー画面は、メイン アプリケーション ウィンドウ上のダイアログにすることもできます。
以下のオプションのうち、1 はアプリケーションのすべての状態への即時アクセスを提供しますが、2 はゲーム ロジックをメニュー ナビゲーション/設定ロジックから分離するため、ベスト プラクティスに近くなります。
オプション 1: メニュー ビューとゲーム ビューを 1 つのビュー コントローラーに結合する
メイン ウィンドウのビュー階層は次のようになります。
UIView (root view) --- UIView (menu layer) --- (all of your menu subviews)
\-- UIView (game layer) --- (all of your game subviews)
新しいフローは次のようなものになります
メイン ビュー (メニュー レイヤー) -> 難易度選択 (モーダル) -> メイン ビュー (ゲーム レイヤー) -> ゲーム オーバー (モーダル) -> メイン ビュー (メニュー レイヤー)
ゲーム オーバーからメニューへの遷移は次のようになります。
これらは両方とも、1 つのアニメーション ブロック内で発生します。
a) ゲーム オーバー ダイアログ アルファ ->0.0f
b) メニュー レイヤー アルファ ->1.0f
dismissModalViewControllerAnimated(false)
基になる操作を実行する
オプション 2: メニュー ビューとゲーム ビューに別のビュー コントローラーを用意する
メイン ウィンドウのビュー階層は次のようになります。
UIViewController (root) --- UIView (menu view) --- (all your menu subviews)
UIViewController --- UIView (game view) --- (all your game subviews)
UIWindow
のrootViewController
プロパティを設定することで、アクティブなView Controllerを切り替えることができます。
新しいフローは次のようなものになります
メニュービュー -> 難易度選択 (モーダル) -> ゲームビュー -> ゲームオーバー (モーダル) -> メニュービュー
ゲーム オーバーからメニューへの遷移は次のようになります。
これらは両方とも、1 つのアニメーション ブロック内で発生します。
a) ゲーム オーバー ダイアログ アルファ ->0.0f
b)rootViewController
メニュー表示に設定
dismissModalViewControllerAnimated(false)
基になる操作を実行する