两个模态呈现的视图控制器 - 解除两个

时间:2016-04-04 19:45:35

标签: ios uikit

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

按钮水龙头,白色模态显示红色。红色模态呈现蓝色。一切都很好。蓝色有例如某个表单供用户完成,然后用户点击蓝色消除。

Three view controllers

Blue想要将用户返回到主UI,白色。当用户点击Dismiss时,会运行:

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

Red& Blue确实解雇了,但 Blue立即消失并且 Red 被视为解雇动画!当慢动画开启时,红色闪光在视觉上会震动并且在模拟器中很容易看到。

我宁愿看到蓝色优雅地在屏幕上滑动以显示白色。

从蓝色回到怀特时,我可以阻止红色的丑陋头部吗?

2 个答案:

答案 0 :(得分:0)

我能够模拟我想要的效果(在IB中)将Red的演示风格设置为“当前上下文”。这告诉UIKit保持Red的父母(白色)视图,所以如果红色在其视野中具有透明度,怀特会透露出来。

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

@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
}

虽然这隐藏了红色闪烁的问题,但它没有解释解雇动画过程;并且意味着怀特的观点不必要地停留在那里。

答案 1 :(得分:0)

我会使用unwind segues。您正在使用故事板,为什么不利用它。只需创建一个从蓝色视图控制器到白色控制器的展开segue即可完成。

相关问题