一次显示 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 个视图控制器,带有一个动画的主要内容,如果未能解决你的问题,请参考以下文章