一次显示 2 个视图控制器,带有一个动画

Posted

技术标签:

【中文标题】一次显示 2 个视图控制器,带有一个动画【英文标题】:Displaying 2 view controllers at once, with a single animation 【发布时间】:2015-03-12 13:50:16 【问题描述】:

例如,我有 baseVC、firstVC 和 secondVC。 BaseVC 是最初显示的唯一 VC,然后当用户按下 baseVC 中的按钮时,他们会看到出现 secondVC。当他们解雇 secondVC 时,他们会看到 firstVC。当他们关闭 firstVC 时,他们会再次看到 baseVC。

换句话说,我想同时呈现两个视图控制器,一个在另一个之上。我希望它像显示单个视图控制器一样进行动画处理。

这似乎是最初显而易见的解决方案:

//Presents secondVC over firstVC, currently off-screen.
firstVC.presentViewController(secondVC, animated: false, completion: nil)

//Presenting firstVC brings firstVC and secondVC onscreen.
baseVC.presentViewController(firstVC, animated: true) 
    () -> Void in

这样做会给我一个错误:

警告:尝试呈现在谁的 视图不在窗口层次结构中!

而我看到的不是我的结果,而是简单的 firstVC 呈现。

我怎样才能做到这一点?

编辑:这些都应该以模态方式显示。

【问题讨论】:

您是否尝试在第一个的完成处理程序中这样做?你喜欢那个动画吗? 在那里执行意味着第一个出现,然后第二个动画或立即出现,这显然取决于动画设置。但是不,这不是我想要的结果。我想对用户隐藏 firstVC,直到他们关闭 secondVC。 只需改变你的调用顺序,首先呈现 firstVC,然后在 firstVC 中呈现 secondVC @luk2302 this 在 firstVC 中动画,然后立即显示 secondVC。 【参考方案1】:

您可以执行以下操作,而不是同时显示两个视图控制器:

var vcs = self.navigationController.viewControllers.mutableCopy();
vcs.addObject(firstVc);
vcs.addObject(secondVc);

self.navigationController.setViewControllers(vcs, animated:false);

如果语法不好,请见谅。我仍然在 Objective-C 中编写代码

然后给它像这样的模态效果: Showing pushviewcontroller animation look like presentModalViewController

【讨论】:

啊,这里的问题不仅仅是动画,还在于它现在给了我一系列推送的视图控制器,而那肯定不是我想要的。我需要它们是模态的。【参考方案2】:

您可以通过以下方式尝试:

    呈现 secondVC 动画 如果 secondVC 将被关闭,则改为显示 firstVC 要么从 viewController 堆栈中删除 secondVC,要么从 firstVC 中弹出两次(如果它会被解除)

由于目前我只能编写 Objective-c 代码,因此我无法针对这种情况提供快速代码。

一般注意事项:尝试在 navigationControllers 中使用 push... 和 pop... 而不是 present...

// in your baseVC
- (void)pushButton:(id)sender 
  [self presentViewController:secondVC animated:true completion:nil];


// in your secondVC
- (void)backButtonAction:(id)sender 
  [self presentViewController:firstVC animated:true completion:nil];


// in your firstVC
- (void)backButtonAction:(id)sender  
  [baseVC dismissViewControllerAnimated:true completion:nil];

关于如何知道backButton事件,请看Trying to handle "back" navigation button action in ios

【讨论】:

我并不完全关注,但可以肯定的是,如果你愿意,Objective-C 绝对会受到赞赏。 啊,这里的问题是我不想push和pop。我在导航控制器上以模态方式呈现。 啊,你还没有提到它们应该是模态的^^。让我想想…… 再次更改它,实际上应该在 baseVC 上方呈现一个模态视图 - 稍后在 secondVC 上方呈现一个模态视图,然后关闭 secondVC,这应该会导致两个模态视图都被关闭

以上是关于一次显示 2 个视图控制器,带有一个动画的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能呈现一个模态视图控制器,并带有默认的关闭动画?

在 iphone 上的 3 个视图控制器之间切换

用动画同时显示 2 个视图控制器

在不使用导航控制器的情况下转到第二个视图时如何显示动画?

从视图控制器动画负 y 原点打破约束

带有向下滑动动画的自定义推送视图控制器