为什么在自定义交叉溶解segue中视图控制器的主视图不对齐?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么在自定义交叉溶解segue中视图控制器的主视图不对齐?相关的知识,希望对你有一定的参考价值。
我编写了一个自定义的UIStoryboardSegue子类来创建两个UIViewControllers之间的淡出/淡入,交叉溶解过渡。
视图控制器的主视图具有在每个视图中居中的按钮(标记为“视图控制器1”和“视图控制器2”,因此我假设当我将一个交叉溶解到另一个时 - 将它们设置为相同的超级视图和使他们的框架相同 - 按钮也将对齐。
class SwapSegue: UIStoryboardSegue {
override func perform() {
fade()
}
func fade() {
destination.view.alpha = 0
source.view.superview?.addSubview(destination.view)
destination.view.frame = source.view.frame
UIView.animate(withDuration: 1, delay: 0, options: .curveEaseInOut, animations: {
self.destination.view.alpha = 1
}, completion: { success in
if var controllerStack = self.source.navigationController?.viewControllers {
controllerStack[controllerStack.firstIndex(of: self.source)!] = self.destination
self.source.navigationController?.setViewControllers(controllerStack, animated: false)
} else {
self.source.present(self.destination, animated: false, completion: nil)
}
})
}
}
这几乎可以工作,但它不会在转换过程中正确定位目标视图,所以当segue的动画完成时,最后会有一个“pop”。对齐似乎大致偏离了导航栏的高度,所以我怀疑这是一个线索。
(注意:在这个循环GIF中你可以看到按钮按下“View Controller 1”,动画交叉淡入淡出,按钮未对齐,然后动画完成时最后的“pop”和目标视图控制器终于放好了。)
如何正确定位它以使其按照应有的方式对齐并且动画将是平滑的?
答案
我找到了解决方案。我不能100%确定为什么会这样,所以如果你能解释一下,请在下面的评论中这样做。
最初我通过自动布局将两个按钮置于视图控制器的主视图中心。
通过将子视图(我们称之为“内容视图”)添加到每个视图控制器的主视图,固定到其边缘,并使该视图中的每个按钮居中,过渡现在可以按预期工作。
以上是关于为什么在自定义交叉溶解segue中视图控制器的主视图不对齐?的主要内容,如果未能解决你的问题,请参考以下文章