2015-06-17 67 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连接起来,如我在答案中所述。 –

相关问题