2014-10-01 20 views
9

自定義過渡對我來說是相當新的。我必須將它們合併到我工作的最後一個項目中,並最終使用UIViewControllerAnimatedTransitioning協議和自定義段落。UIViewControllerAnimatedTransitioning vs custom UIStoryboardSegue

自定義賽段看起來有點清潔/友好,因爲您可以在故事板中選擇它們並完成它。然而,似乎沒有如此友好的方式來設置後/流行音樂。我已經閱讀了有關展開segues,但我似乎無法找到任何東西綁在導航控制器的後退按鈕。

UIViewControllerAnimatedTransitioning協議方法有更多的設置,但允許您指定進入和退出視圖。

如果我的應用程序無法用我的自定義繼續彈出,這不是問題,因爲應用程序的流程不允許您返回到先前的視圖。大多數應用程序雖然需要這樣做,因此自定義的segue似乎毫無價值,除非您繼承UINavigationController並允許自定義彈出段。

我錯過了什麼,因爲它似乎UIViewControllerAnimatedTransitioning是視圖控制器之間動畫採取的最佳方法。爲什麼我會想要子類UIStoryboardSegue

回答

4

我同意,與其他類型的segues相比,缺乏關於unwind segues的文檔,但是在您掌握了它們之後,它們非常簡單。我的理解是,segues(包括展開segues)是Apple希望在視圖控制器之間轉換的方式。即使你創建自定義的賽段,定期展開的賽段仍應該起作用。

在我自己的工作中,我已經創建了一個UIStoryboardSegue的子類,用於在segges之間轉換時執行自定義動畫。以一個廣爲人知的應用程序爲例,當您點擊優步應用程序中的菜單按鈕時,地圖視圖控制器向下移動,並出現一個表格視圖控制器。當你點擊表格中的一行時,新的視圖控制器從右側滑入,但地圖視圖控制器仍然可以在屏幕上看到。當你點擊地圖視圖控制器時,它會返回到原來的位置。出於某種原因,我認爲Uber實際上並沒有實現segues,但只是將視圖控制器放置在視圖控制器的頂部,但是我在自己的應用程序中實現了一些類似於自定義漸變的東西。這些賽段難以用蘋果的默認賽段複製,所以我使用了自定義段落。

如果將一個展開的漸變綁定到後退按鈕,那麼您將需要覆蓋uinavigationcontroller中默認後退按鈕的正常展開。我發現很難定製那個segue。我會建議隱藏uinavigationcontroller附帶的默認後退按鈕,添加您自己的酒吧按鈕,並將此新按鈕綁定到展開順序。我知道這很煩人,考慮到默認的後退按鈕有一些額外的功能,例如當標題足夠短時使用前一個視圖控制器的標題作爲其文本。不幸的是,我認爲蘋果真的想阻止你定製默認按鈕,並且很難改變。我遺漏了如何用自定義替換默認後退按鈕,所以讓我知道如果你有麻煩。

不管怎樣,創造開卷SEGUE,您必須首先創建uiviewcontroller你平倉(不)在類(或父類)的方法。

- (IBAction) methodName:(UIStoryboardSegue *)segueName 

可以更改methodNamesegueName到任何你喜歡的。現在轉到故事板,然後轉到包含uiviewcontroller的場景,您將從解開。如果您現在按ctrl將此uiviewcontroller(控制器頂部欄欄左側的黃色按鈕)拖到退出按鈕(同一欄右側的橙色按鈕),您現在將看到一個菜單彈出包含上面的methodName。點擊該方法,現在將創建展開順序。

在創建了展開順序之後,您現在可以在故事板左側的輪廓中看到它。如果你點擊賽格,你可以檢查它並給它一個標識符。

我們對付它綁後退按鈕...

再次,查看uiviewcontroller你是從平倉,如果從自定義後退按鈕(不是默認後退按鈕)控件拖到這個uiviewcontroller類的故事板,IBAction將爲你綁定到按鈕。在此方法中,添加:

[self performSegueWithIdentifier: segueIdentifier sender:nil]; 

其中segueIdentifer是您在上面展示的標識符。現在,當你點擊後退按鈕時,展開的繼續會被執行。你也可以做一些動畫,或者在展開順序執行之前做一些動畫。

我實際上已經做了一些複雜的自定義放鬆處理動畫源和目標視圖控制器。如果您可以更具體地瞭解您希望展開展望的方式,我可以嘗試幫助您。

+1

感謝您的詳細回覆。也許你可以添加關於UIViewControllerAnimatedTransitioning的信息,以及什麼時候適合使用?謝謝。 – 2015-02-04 22:54:40

相關問題