在另一个 ViewController 上呈现 ViewController

Presenting a ViewController over another ViewController

我今天有一个很长的问题,因为它需要一些解释。让我们从一个例子开始。


例子

假设我有三个视图控制器:

  1. 全尺寸视图控制器
  2. FirstViewController
  3. 第二视图控制器

FullSizeViewController,顾名思义,就是要占据整个屏幕的space。另一方面,FirstViewController 和 SecondViewController 应该只占据屏幕高度的大约 3/4。下面放几张图来说明一下。

这里我们有 FullSizeViewController。没什么特别的,只有两个按钮 - "First" 和 "Second"。如果您现在还没有了解,这两个按钮应该会切换各自的视图控制器,如下所示。


问题

我遇到了这方面的主要问题?我怎样才能

  1. 从底部为视图控制器设置动画
  2. 更改两个较小的视图控制器的大小
  3. 仍然允许与 FullSizeViewController 交互,即使在其主要内容之上打开了一个小视图控制器,但不是两个切换按钮?

我试过的

因为我不太确定如何做到这一点,所以我没有尝试那么多,但我尝试了一件事。

在连接到 "First" 按钮的 IBAction 中:

let firstVC: FirstViewController = self.storyboard?.instantiateViewControllerWithIdentifier("FirstViewController")! as FirstViewController
        self.presentViewController(firstVC, animated: true, completion: nil)

在 FirstViewController 的 viewDidLoad 中:

self.view.frame.size = CGSizeMake(UIScreen.mainScreen().bounds.size.width, UIScreen.mainScreen().bounds.size.height - 68)

tl;dr 如何实现 this?

您的全尺寸 VC 应该是 custom container view controller。当您希望其他控制器之一出现在屏幕上时,您可以对其进行实例化,根据需要调整其大小,将其添加为 *child view controller*,然后使用 animateWithDuration 将其框架从底部更改为筛选到您希望它结束​​的位置。

您不应该使用 presentViewController,因为它会给您一个占据整个屏幕的模态 VC。如果您还没有阅读名为 "Implementing a Custom Container View Controller" 的文档,您应该阅读。