繁体   English   中英

两个模态呈现的视图控制器-都关闭

[英]Two modally presented view controllers - dismiss both

在我的应用程序中,有三个视图控制器。 白色,红色和蓝色。 White是应用程序的主视图。

在按钮轻击时,白色将呈现红色。 红色表示蓝色。 一切都很好。 蓝色具有例如供用户填写的某种形式,然后用户点击蓝色上的关闭。

三视图控制器

蓝色想让用户返回主界面,白色。 当用户点击“关闭”时,将运行:

@IBAction func didTapDismissBoth(sender: AnyObject) {
    let red = presentingViewController!
    let white = red.presentingViewController!
    white.dismissViewControllerAnimated(true, completion: nil)
}

红色和蓝色确实都可以消除,但是蓝色立即消失 ,可以看到红色在进行消除动画! 启用“慢速动画”时,红色闪烁会在视觉上震颤,并且在模拟器中很容易看到。

我宁愿看到Blue优雅地滑出屏幕,露出White。

从蓝色返回白色时,我可以防止红色抬起丑陋的头吗?

通过(在IB中)将Red的表示样式设置为“在当前上下文中”,我能够模拟所需的效果。 这告诉UIKit保持Red的父(White)视图不变,因此,例如,如果Red在其视图中具有透明性,White将显示出来。

在解雇过程中,我将“红色”设置为完全透明,并设置蓝色动画。

@IBAction func didTapDismissBoth(sender: AnyObject) {
    let red = presentingViewController!
    let white = red.presentingViewController!
    red.view.alpha = 0 // Red presents "over current context" so white's view still exists. White's view will show through this transparent red
    red.dismissViewControllerAnimated(true, completion: { // dismiss blue, revealing transparent red & white showing through
        white.dismissViewControllerAnimated(false, completion: nil) }) // dismiss red with no animation
}

尽管这掩盖了红色闪烁的问题,但并不能解释解雇动画的过程。 意味着怀特的观点不必要地徘徊。

我会为此放松一下。 您正在使用情节提要,为什么不利用它。 只需创建从蓝色视图控制器到白色视图控制器的放松序列即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM