使用单个推送动画推送和呈现视图控制器

Push and present view controllers with a single push animation

来自我的导航控制器的根视图控制器Root

如何使用单个 push 动画同时执行这两项操作?

( 这背后的想法是视图控制器 A 允许编辑一些内容。如果没有创建内容,它需要首先显示视图控制器 B允许用户输入标题然后创建内容。)

我尝试过的:

当我在视图控制器 AviewDidLoad() 方法中执行以下操作时:

if content == nil {
    let createContentViewController = // instantiate new view controller instance
    present(createContentViewController, animated: false)
}

UIKit 也会在 animated 设置为 false 时省略 push 动画——所以我根本看不到任何动画。当 animated 设置为 true 时,我得到一个双重动画(首先按下,然后是模态)。

您在执行您描述的操作时遇到问题的原因是,在视图控制器 A 成为视图控制器层次结构的一部分之前,您无法 present 在视图控制器 A 上查看控制器 B — 并且直到您拥有推了,不是。

因此,我建议在这个故事中完全不要使用呈现的视图控制器。在我看来,您真正描述的只是一个视图控制器 A 及其主视图(视图 A),其前面有一个视图 B。这是您可以在创建 View Controller A 和推送它之间轻松准备的事情。视图 B 仍然可以包含一个关闭按钮或类似的按钮,您可以通过将其滑出屏幕来响应,从而显示视图 A。

如果出于代码组织的目的,您确实需要一个视图控制器 B,那么让视图控制器 A 成为视图控制器 B 的自定义父视图控制器。该解决方案的一个很酷的特性是整个事情都可以在使用嵌入 segue 的故事板。如果我们推送 View Controller A 而你不需要 View Controller B,你只需在推送之前隐藏 View B。