在我的应用程序中有三个视图控制器;白色,红色和蓝色。白色是该应用程序的主要视图。
按钮水龙头,白色模态显示红色。红色模态呈现蓝色。一切都很好。蓝色有例如某个表单供用户完成,然后用户点击蓝色消除。
Blue想要将用户返回到主UI,白色。当用户点击Dismiss时,会运行:
@IBAction func didTapDismissBoth(sender: AnyObject) {
let red = presentingViewController!
let white = red.presentingViewController!
white.dismissViewControllerAnimated(true, completion: nil)
}
Red& Blue确实解雇了,但 Blue立即消失并且 Red 被视为解雇动画!当慢动画开启时,红色闪光在视觉上会震动并且在模拟器中很容易看到。
我宁愿看到蓝色优雅地在屏幕上滑动以显示白色。
从蓝色回到怀特时,我可以阻止红色的丑陋头部吗?
答案 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即可完成。