2015-06-17 61 views
3

我在製作一個可搜索的列表應用程序。它將有一個「過濾器」按鈕,當點擊時,將顯示過濾選項列表如何在Swift中呈現另一個視圖控制器?

模式視圖控制器應該從右到左,而不是覆蓋整個屏幕(如下所示)。

我已經設法以編程方式顯示一個視圖控制器,覆蓋整個頁面,但我無法設法找出如何動畫視圖控制器的開放(從右到左)以及如何留下一些空間查看其他View Controller。它必須在Swift中。我已經看到了一些關於這個問題的問題,但是我可以找到使用Objective C和不推薦使用的API的所有問題。

感謝

例子:

eBay app

回答

7

沒有疑問多種方式來做到這一點。

一種方法是在您當前的視圖控制器中添加一個「容器視圖」(它是IB中對象列表中的一個特殊視圖類型),並通過控件將容器視圖中的嵌入segue拖動到另一個視圖控制器上場景,你想主辦。將容器視圖的位置放大並放大到最終的位置,然後添加將其放置在該位置的前緣約束。

當您使用容器視圖和嵌入式segue時,系統會負責您需要執行的所有內務操作,以便託管子視圖控制器。

將一個插座連接到約束。

在您的viewWillAppear方法中,將screen width - container x添加到約束的常量並在內容視圖上調用layoutIfNeeded()將其移出屏幕而不顯示動畫。將您添加到水平約束中的金額保存在實例變量中。

然後,當您想在屏幕上設置動畫時,請更改約束上的常量值(減去您在viewWillAppear中添加的量)並在UIView塊animateWithDuration:animations:內調用layoutIfNeeded()

0

您可以創建一個容器視圖並在屏幕上從右向左設置動畫效果。

let containerView = UIView() 
    containerView.addSubview(viewController.view) 
+1

實際上,如果你想在父/子關係中託管另一個視圖控制器,你需要做的事情還有很多。您需要將子項添加到子視圖控制器列表中,然後有多少系統消息應該轉發。最好在IB中使用容器視圖,並將其他視圖控制器與嵌入式Segue連接起來,如我在答案中所述。 –

相關問題