2012-03-12 103 views
5

我正在使用不能成爲導航控制器的一部分的SplitViewController。我在IBAction上使用SetRootViewController,這很好,但它不是動畫。理想情況下,我想使用與導航控制器相同的動畫(從左/右滑入),但如果這不可行,我希望在需要時使用一致的動畫。你可以動畫setRootViewController嗎?

+0

你能提供更多關於你想要什麼的細節嗎?你想讓你的UISplitViewController像UINavigationController一樣在何時何地動畫? – 2012-03-16 08:22:54

+0

Svc從用戶點擊按鈕後的第一個屏幕上的視圖控制器上的ibaction加載。我希望Svc能夠進行動畫製作,無論是推送還是交叉融合或其他。 – glenstorey 2012-03-16 09:23:11

回答

5

我不確定這一點,但我會建議如下。

UISplitViewController設置爲您的UIWindowrootViewController。在viewDidLoad中,您使用按鈕的UIViewController作爲模式進行presentModalViewController:animated:調用。確保你不要動畫。這給你一個錯覺,即模式視圖是應用啓動時看到的第一個視圖。 當您按下按鈕時,您將使用dismissModalViewControllerAnimated:爲按鈕的UIViewController設置動畫效果。現在你可以選擇如何動畫。你的選擇之一是交叉解決。

+0

這是一個非常有創意的解決方案,我會給它一個去,讓你知道我如何繼續。 – glenstorey 2012-03-20 21:12:45

+0

這會起作用,而且它是解決問題的好方法 - 所以你可以得到正確答案 - 但我不確定我是否會真正使用它。它感覺有點凌亂,並且打破了預期的設計流程;特別是因爲SVC僅用於應用程序的一部分。 – glenstorey 2012-03-20 21:33:02

+0

@Dries De Smet--我嘗試了你的建議,我寫了代碼presentModalViewController:animated:在Svc的ViewDidLoad中,並在btnClick上駁回它..但是因爲VC被解僱而且Svc被提出了Svc ViewDidLoad:再次調用presentModalViewController:animated:被調用,並且Vc再次顯示。難道我做錯了什麼。 – Bonnie 2012-07-27 06:00:18

2

使用iOS 5.0,您將能夠使用presentViewController:animated:completion從您的初始rootViewController中呈現SplitViewController。

以前的iOS 5.0中,您唯一的機會是在rootViewController的視圖中使用transitionFromView:toView:duration:options:completion方法,這意味着您需要手動將幾條消息傳遞給SplitViewController。 iOS 5.0以前版本不支持容器ViewControllers。

但可能你想重新考慮你的設計。 您應該首先將SplitViewController設置爲rootViewController。在應用程序啓動時(或者您需要的時候),您應該以模態方式呈現您的LoginViewController。 當用戶成功登錄時,您可以隱藏自己想要選擇的動畫的模態視圖。

由於SplitViewController是您的主ViewController,它應該是您的應用程序的rootViewController。

+0

您的解決方案是正確的,但我不同意設計反思。他想要做的是絕對合乎邏輯的。在許多情況下,您建議的解決方案將不起作用。我們使用相同的設計 - 編寫我們自己的屏幕切換機制和我們自己的分割視圖控制器(這真的很簡單)。 – Sulthan 2012-03-19 15:27:54

+1

感謝您的回答Ben-G。當我嘗試[appDelegate.window setRootViewController:splitViewController]; [splitViewController presentViewController:splitViewController animated:YES completion:NULL];我得到錯誤'應用程序嘗試以模式呈現分割視圖控制器'。我猜我在某處使用錯誤的語法?我同意@Sulthan關於我所做的設計決定,但謝謝你的建議。 – glenstorey 2012-03-19 17:34:02

+0

關於[link](http://stackoverflow.com/questions/2579861/split-view-controller-must-be-root-view-controller)SplitViewController是一種特殊情況,不允許以模態方式呈現。不幸的是,你將不得不使用替代解決方案,或者使用'transitionFromView:toView:'方法來處理傳遞給splitViewController的消息。 – 2012-03-20 07:27:33