4

我試圖在兩個不同的活動模態視圖控制器之間切換並嘗試平滑動畫。理想情況下,我希望動畫看起來就像新的「模態視圖」正在成爲當前「模態視圖」的模態視圖。兩個模態視圖控制器之間的動畫過渡

爲了保證我的應用程序的一致性,我需要限制在任何給定時間只顯示一層模態視圖控制器。

目前我只有現有的模態視圖關閉沒有動畫,然後通過RootController動畫下一個模態視圖,但這看起來不太好。

感謝

回答

7

你可以使用默認的過渡只是目前的第二模型視圖控制器在第一。這聽起來像你的第二個模型視圖正在分配和初始化在與您的第一個模型視圖相同的視圖控制器。如果是這種情況,請考慮重構代碼,以便讓第一個模型視圖控制器顯示第二個模式視圖控制器。這樣做會像你想要的那樣顯示一個。

如果您需要在同一個根視圖控制器中保留兩個模態視圖控制器的演示代碼,您可能需要創建一個委託方法。這將從第一個模式視圖控制器發回一個消息回顯示它的根視圖控制器,並傳遞第一個模態視圖控制器的引用。接下來,使用此引用來告訴第一個模式視圖控制器在其上呈現第二個模式視圖控制器。

我肯定會推薦以前的解決方案,因爲它在邏輯上更清晰,引入保留週期的可能性較小。

在響應你的澄清:

要在兩個之間進行轉換,嘗試:

在已經從以前的會話顯示在您的ModalViewControllerOne例如:

self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self dismissModalViewControllerAnimated:YES]; 

在你RootViewController的的-viewDidAppear:

這樣做的想法是將第一個模態視圖控制器交叉溶解回根視圖控制器,然後立即將新模態視圖控制器交叉溶解回到屏幕上。

如果只是在啓動畫面之間不同的視圖,您可以不使用兩個視圖控制器,而是使用一個具有邏輯的視圖控制器,根據輸入的URL簡單地替換另一個視圖,並使用動畫當在視圖之間交換時。

+0

這些模式顯示中的每一個都基本上是一個不同的splash/login屏幕。根據用於輸入應用程序的URL,我顯示不同的模式飛濺。因此,如果從應用程序的先前使用中啓動1,並且他們從請求啓動2的URL進入應用程序,我希望從啓動1到啓動2的平滑過渡,而不必同時啓動,一個在另一個之上。 – FishStix

+0

我已經爲你更新了我的答案。 – Andrew

+0

我只跟蹤一個UINavigationController作爲我的「modalController」,並將一堆ViewControllers傳遞給一個委託方法,如果window.rootController有一個「presentedController」,那麼它呈現的是modalController,我只是用動畫替換viewControllers。否則,我仍然設置模式控制器的視圖控制器和調用窗口。rootController presentModalViewController:modalController – FishStix