2012-05-31 23 views
3

背景:我想確保viewController在出現時正確旋轉。我的viewControllers有很好的代碼,可以管理旋轉和方向。iOS:在ViewDidAppear上進行方向檢查旋轉

問題:給定一個NavigationController中的兩個viewControllers,viewC1viewC2。我做了以下內容:

1)設置RootViewController的到viewC1

2)按viewC2到NavigationController

3)旋轉

4)POP viewC2

5 )viewC1仍舊在舊方向外觀(如在未調用willAnimateRotationToInterfaceOrientation的轉換代碼中)與新方向卡住。

我能做些什麼來確保viewC1致電willAnimateRotationToInterfaceOrientation重建自己在新的輪換中正確看待?

附加信息: 這是所有代碼(沒有故事板/ xib)。我在所有視圖上都有shouldAutorotateToInterfaceOrientation返回YES。我用willAnimateRotationToInterfaceOrientation來管理我的所有輪換。

哦,請不要黑客。例如,從旋轉中複製代碼,然後手動檢查旋轉,並在viewDidAppear中進行管理。

+1

不要調用ViewControllers'view1'和'view2'。這只是令人困惑。「UIView」和「UIViewController」之間存在巨大差異(如您所知)。 –

回答

1

想想方法的名稱,以及你想要達到的目標。

willAnimateRotationToInterfaceOrientation指示由視圖控制器控制的視圖即將動畫到特定方向。如果您的視圖位於導航堆棧的中間,那麼它不會顯示在屏幕上。製作不在屏幕上的東西是昂貴的,並且最終沒有價值。所以,這個特定的方法是不可能的,但是問題依然存在,UIKit中沒有任何其他更合適的方法。原因在於當屏幕外顯示的內容是無價值的時候旋轉某些東西(即使不是動畫)。開發人員有責任在視圖出現時處理方向變更(您將按需求轉換)。

你說你不想要黑客,但是你描述爲黑客的方法可能是最合適的做法。有一個名爲類似 -(void) updateLayoutForOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated { ... } 的通用方法並不是一個壞主意。這可以是整個視圖控制器的方向更改轉換處理程序。

你需要檢查可能/手柄方向問題的地方是

-(void) viewWillAppear:(BOOL)animated

-(void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation duration: (NSTimeInterval) duration

,並在這兩個,叫updateLayoutForOrientation:animated:做的工作適合你。

+0

有效點參數。讓我們拭目以待,看看其他人是否有更直接的方式來做,因爲它看起來像旋轉視圖切換是非常普遍的。除非一天有更好的方法,否則我會將你的答案標記爲正確的。爲了您的信息,您可以在'viewWillAppear'內使用'willAnimateRotationToInterfaceOrientation'並獲得相同的結果。 – Byte

+0

@Byte不要誤解我的意思,在'viewWillAppear'內調用'willAnimateRotationToInterfaceOrientation'肯定是可行的。提取共享邏輯並將其置於其自己的方法中,並使用直接委託方法調用該方法是我自己的個人風格。我覺得它讓代碼更好理解,但這一切都歸結爲個人偏好。 – WDUK