2012-03-12 12 views
0

私はマルチプレイヤーゲームを作っています。私の最初の画面には、ログインフォームが表示されます(モーダルではありません)。終了すると、 "ルートクラス"の代理人を呼び出す必要があり、 "ルートクラス"はこのビューコントローラを削除し、別のオブジェクトを追加する必要があります。ゲームが終了すると、 "ルートクラス"が別のデリゲートメソッドで呼び出され、別の画面などを表示してください。ビュー階層のアーキテクチャ - iPhone

私はそれについて3つのアイデアを持っており、どちらがよりうまくいくかを知りたいと思います。

a)私のルートクラスはuiviewcontrollerであり、デリゲートメソッドが呼び出されるとサブビューを追加/削除します。

b)私のルートクラスはNSObjectサブクラスで、それが必要なときにウィンドウrootViewControolerを変更します。

ナビゲーションバーなしのナビゲーションコントローラ。しかし、私はビューのhiearchyをどのように管理していますか?

私のビューhieararchyを管理するためのより良いロジックは何ですか? aとb以外の考えはありますか?

+0

あなたは何を試してみませんか?どんな成功? – QED

答えて

0

あなたが提示するオプションのうち、私は最高のものが好きです。

オプションa)は、ビューコントローラーの主要なルーラーを無視するため、コンテンツのフルページビューを管理するために短くなります。あなたのような状況でaddSubviewを使用すると、ビュー階層内のすべてのオブジェクトのメモリを管理するために多くのハードルを飛び越す必要があります。UIViewControllerホイールを改革する必要があります。

オプションb)は大丈夫ですが、何とか私を満足させるようなことはありません。ちょうどルーツを入れ替えると外に出ることをやり直すのは危険だと思われます。これはUIViewControllerが行うことであり、おそらくそれはあなたや私よりもうまくいくでしょう。いずれにしても、これを行うとアニメーションのメリットが失われます。どのように私たちをもたらす...

オプションc)。 UINavigationControllerは、あなたの特定の状況に必要な作業を行うようにプログラムされています。 UINavigationController- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animatedを使用して階層を管理できます。あなたは通常のプッシュを行うことができますが、メインのゲームVCが前面に座ってシステムからのリソースを要求している間、これは前のVCをメモリに保持します。要するに、あなたのc)は簡単で効果的だと思います。

ここでのポストスクリプトのように、a、b、c以外の選択肢があることに注意してください。あなたはUIPageViewControllerを使って得るかもしれませんが、私はそれを推薦していません。 iOS 5は、アプリのUIを管理する方法としてUIStoryboardを導入し、移行を管理するにはUIStoryboardSegueを導入しました。ドキュメントをチェックしてください。iOS 5をターゲットにしている場合は、ドキュメントも参考になるでしょう。しかし、簡単なnavコントローラがあなたのために働くように思えます。

1

いずれかのa)またはb)が機能します。選択は、ビューの提示の順序を決定するためにモデル層がどの程度使用されるかといった要因に依存する。提示シーケンスが動的である場合、ヘルパークラス設計(オプションb)は、MVC分離に関してより純粋であり得る。最終的には、アプリケーションの詳細と複雑さに依存します。

一般的に、このような設計上の決定をするとき、私が尋ねる質問のいくつか:

  • どのようにそれがメモリ管理に影響しますか?
  • デザインはどのように影響しますかパフォーマンス
  • 適切に設計します別々の懸念
  • デザインはですですか? 依存関係を最小限に抑える
  • デザインはフレームワーク/プラットフォームデザインパターンを利用していますか?
関連する問題