2011-02-02 91 views
1

我已經創建了幾個iPhone和iPad應用程序,但是我已經用另一個支持api或者像Cocos2d這樣的開源庫來編寫它們,支持場景管理和屏幕轉換。我不覺得我已經弄清楚如何在沒有這些外部API的情況下完成屏幕/場景/視圖管理假設。有人可以很簡單地,但清楚地解釋一個應用程序將如何管理屏幕過渡和/或指向我一個很好的參考,以儘可能少的混亂來證明這一點?iOS中的視圖管理

我應該使用UIViewController派生類來分隔我的應用程序的屏幕上的功能(除了已經打算處理導航控制器等多屏幕操作的功能)?而且,我的應用程序基本上會將控制權交給這些視圖控制器之一,然後這些視圖控制器將使用其組件(如標籤,按鈕,任何視圖)構建場景。如何切換到相關的視圖控制器,並且我應該期望loadView作爲結果被調用?然後,當某些觸發器要求移動到屏幕B時,會調用「轉換」我的視圖,然後調用其他視圖控制器來「設置視圖」並將它們轉換爲?

如果有一個示例程序可以真實地說明這一點,最好不使用接口構建器,那將是理想的。

回答

7

我應該使用 的UIViewController派生類 分開我的應用程序的屏幕,通過屏幕 功能?

是的。

而且將我的應用程序基本上是手工 控制權交給這些視圖 控制器,然後這將構建 我的場景,它的組件之一?

是的,儘管很多風險投資公司只是從筆尖獲取他們的視圖樹,並且關注核心控制者的責任:1。將模型變化傳播到各種視野中;以及2.將視圖事件傳播回模型上的適當操作。我建議獲取InterfaceBuilder的掛件。這是不完美和煩人的,但它可以節省您的工作時間和代碼量。

如何切換到相關視圖控制器?

的許多方式:

  • 如果你的風險投資商在導航控制器託管,[[self navigationController] pushViewController:theNextVC animated:YES]是一種常見的成語。
  • 在一組風險投資組合之間切換時,最好用UITabBarController完成。
  • 如果你想做模態疊加,[self presentModalViewController:theNextVC animated:YES]是如何。然而,比一兩個更深的Modal堆棧變得笨拙。
  • 通過將它分配給你的窗口的rootViewController屬性(應用程序委託可以做到這一點,或主要的筆尖可以),在4.x中完成第一個VC的呈現。或通常在應用代理中找到的傳統方式4之前的版本:[myMainWindow addSubview:[myInitialVC view]]
  • 一些專門的蘋果提供的VC(視頻,照片選擇器)有他們自己的演示方法。

請注意,對於前兩種方法,如果您想要的行爲而不是UI小部件,您可以隱藏導航欄或選項卡欄並以編程方式執行所有操作。

我應該期待loadView被調用嗎?

它會,但大部分的「我現在出現!」邏輯屬於viewWillAppear:(在過渡動畫開始之前調用,當視圖沒有父項時)以及viewDidAppear:(在動畫完成後,在視圖完全可見時調用)。loadView僅在VC認爲視圖很快需要時調用一次,並且不會再次調用,除非內存不足情況轉儲視圖並需要重新創建。

覆蓋loadView當你想用一些其他視圖樹構造方法完全替換nib加載。我開始這樣做,但很少這樣做。

覆蓋viewDidLoad當你仍然想要正常的筆尖加載發生,但也想做一些你自己的視圖樹構造/後處理。這是我發現自己在99%的時間內完成的。

當某些觸發器要求移動到屏幕B時,會調用「轉換」我的視圖,然後調用其他視圖控制器來「設置視圖」並將它們轉換爲?

如果您使用前面列出的任何演示方法,則會發生過渡。所有你需要做的是實現viewWill/DidAppear和朋友,當它發生時被告知。

您可能希望調查「TheElements」示例項目(在xcode文檔中搜索「元素」)根據要求,它不使用nibs;它以艱難的方式設置了代碼中的所有內容。它有很好的使用TabBarController和NavigationController的例子,並且或多或少以推薦的方式在VC之間分割責任。

+0

哇,很多的話。隨意編輯這個只是你發現有用的位,如果有的話。 – rgeorge 2011-02-02 06:10:43

1

您有2個基本控制器,UITabBarController或UINavigationController的基本選項。 (你可以在UITabBarController中放置一個UINavigationController,但不能以其他方式)。

如果你有一個UITabBarController,最簡單的做法是爲每個選項卡分配不同的視圖控制器(UIViewController子類)。 UITabBarController將處理它們之間的轉換並調用諸如viewWillAppear之類的方法。

使用UINavigationController,您可以設置rootViewController。該視圖控制器然後負責呼叫[self.navigationController pushViewController:animated:]。這通常使用UITableViewController完成。 UINavigationController將調用像viewWillAppear這樣的方法。

呈現視圖控制器的最後一個選項是以模態方式呈現它。這是屏幕彈出來填滿屏幕的地方。您可以將其設置爲從底部開始,翻轉或淡入。爲此,請創建視圖控制器並致電-[UIViewController presentModalViewController:animated:]

除此之外,大多數視圖控制器一次在屏幕上(iPad除外)。使用子類UITableView和UIScrollView或者只是UITableView。每個視圖控制器應該獨立於它的容器。這意味着你可以在UINavigationController上推動相同的視圖控制器,或者將其設置爲UITabBarController上的選項卡或以模態方式呈現它。