2012-03-12 57 views
0

我正在製作多人遊戲。我的第一個屏幕,應該顯示一個登錄表單(不是模態)。當它結束時,它應該調用一個委託給我的「根類」,「根類」應該刪除這個視圖控制器並添加另一個。然後當遊戲結束時,「根類」將被另一個委託方法調用,它應該顯示另一個屏幕等。視圖體系結構 - iPhone

我有3個想法,我想知道哪個會更好地工作。

a)我的根類是一個uiviewcontroller,它在調用委託方法時添加/刪除子視圖。

b)我的根類是NSObject子類,它在必要時更改窗口rootViewControoler。

c)無導航欄的導航控制器。但我如何管理視圖hiearchy?

什麼是更好的邏輯來管理我的看法hieararchy?除了a和b以外的其他想法?

+0

你試過什麼?任何成功? – QED 2012-03-20 01:56:44

回答

0

您提供的選項中,我喜歡c)最好。

選項a)因爲忽略了視圖控制器的主要功能而出現故障 - 要管理整頁內容視圖。在像您這樣的情況下使用addSubview需要您跳過一堆障礙,以管理視圖層次結構中所有對象的內存,並且您只需重新創建UIViewController輪。

選項b)是好的,但不知怎的,它似乎永遠不會滿足我。只是交換根源,看起來似乎有風險 - 這就是UIViewController要做的事情,它可能會比你或我做得更好。無論如何,如果你這樣做,你將失去動畫的任何好處。這給我們帶來了...

選項c)。 UINavigationController被編程爲完成您特定情況所需的工作。您可以使用UINavigationController- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated來管理層次結構。你可以做一個正常的推動,但是當你的主遊戲VC坐在前面並且要求系統提供資源時,這將使前一個VC保持在內存中。總之,我認爲你的c)簡單而有效。

作爲發佈腳本在這裏,請注意,除了你的a,b,c之外,還有其他的選擇。您可能會使用UIPageViewController,但我不推薦它。 iOS 5引入了UIStoryboard作爲管理應用UI的方法,並且UIStoryboardSegue用於管理轉換。查看文檔,如果您定位iOS 5,它們也可能會對您有所幫助。但它聽起來像一個簡單的導航控制器將爲你工作。

1

a)或b)都可以工作。該選擇取決於諸如模型層用於確定視圖呈現順序的程度等因素。如果演示序列是動態的,那麼輔助類設計(您的選項b)在MVC分離方面可能更純。最終,決定取決於應用程序的細節和複雜性。

一般地,一些像這樣的設計決策,當我問的問題:

  • 它是如何影響內存管理
  • 設計如何影響性能
  • 設計合適分別關注
  • 設計靈活?是否最小化依賴關係
  • 設計利用框架/平臺設計模式