展开 segue 会从视图中删除原始 VC,为什么?



我现在盯着把我的头发拉到这个上面,所以一些帮助将不胜感激。

我有一个 segue(从右边滑动(,它工作得很好,可以从右边滑动一个新的view到视图中。

我现在正在尝试返回并使用以下自定义类展开 segue。

一切似乎都正常,我可以看到第一个视图从左侧滑回,但问题是它立即从视图中消失。

我唯一的dismiss电话是在originalVC,在下面的放松课上,这是我正在回避的观点,我想从中驳回。

//Segue: Unwind From Right
class UnwindSegueFromRight: UIStoryboardSegue {
override func perform(){

let originalVC = self.source
let destinationVC = self.destination
originalVC.view.superview?.insertSubview(destinationVC.view, aboveSubview: originalVC.view)

destinationVC.view.transform = CGAffineTransform(translationX: -originalVC.view.frame.size.width, y: 0)
UIView.animate(withDuration: 0.25,
delay: 0.0,
options: UIViewAnimationOptions.curveEaseInOut,
animations: {
destinationVC.view.transform = CGAffineTransform(translationX: 0, y: 0)
},
completion: { finished in
originalVC.dismiss(animated: false, completion: nil)
})
}
}//end class

编辑:按照下面的编辑将视图添加到keyWindow引入了一组新问题,当我放松时,tabBar从视图中消失。

class UnwindSegueFromRight: UIStoryboardSegue {
override func perform(){

let originalVC = self.source
let destinationVC = self.destination
UIApplication.shared.keyWindow?.insertSubview(destinationVC.view, aboveSubview: originalVC.view)

destinationVC.view.transform = CGAffineTransform(translationX: -originalVC.view.frame.size.width, y: 0)
UIView.animate(withDuration: 0.25,
delay: 0.0,
options: UIViewAnimationOptions.curveEaseInOut,
animations: {
destinationVC.view.transform = CGAffineTransform(translationX: 0, y: 0)
},
completion: { finished in
originalVC.dismiss(animated: false, completion: nil)
})
}
}//end class

这是SegueFromRight类,它是初始的 segue

//Segue: From Right
class SegueFromRight: UIStoryboardSegue {
override func perform(){
let originalVC = self.source
let destinationVC = self.destination


UIApplication.shared.keyWindow?.insertSubview(destinationVC.view, aboveSubview: originalVC.view)

destinationVC.view.transform = CGAffineTransform(translationX: originalVC.view.frame.size.width, y: 0)
UIView.animate(withDuration: 0.25,
delay: 0.0,
options: UIViewAnimationOptions.curveEaseInOut,
animations: {
destinationVC.view.transform = CGAffineTransform(translationX: 0, y: 0)
},
completion: { finished in
originalVC.present(destinationVC, animated: false, completion: nil)
})
}
}//end class

您将destinationVC.view添加到originalVC,因此当您关闭originalVC时,您也摆脱了destinationVC.view。 换句话说:

originalVC呼叫解除之前,您必须致电:

destinationVC.view.removeFromSuperview()

最新更新