我想使用CGAffineTransform实现自定义序列。我在多个转换中使用它。但是segue无法正常工作,它甚至在其中一个场景中给出了致命错误EXC_BAD_ACCESS。奇怪的是,segue并没有在第一个场景LoginViewController上设置动画。因此,下一个场景基本上从无处弹出。但是程序没有崩溃。它确实给了我一条错误消息:
Unbalanced calls to begin/end appearance transitions for <MyTritonLink.TabBarDataController: 0x7faf351df200>.
segue确实在以下场景执行了动画。它的执行方式非常奇怪。一切都是从右推动的,但导航栏根本没有动。并且在执行src.present时崩溃(图片和代码附在下面)。当应用程序崩溃时,导航栏仍是最后一个场景的导航条,但其他所有内容均已从右侧推入。
我能想到的一些可能原因是: 我将几乎每个场景都嵌入了Navigation Controller,并对其进行了自定义以能够传递数据。因此,在prepare方法中,我首先传递了数据:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "CourseTableViewSegue" {
// Pass data
(segue.destination as! NavigationDataController).browser = browser
(segue.destination as! NavigationDataController).webView = webView
(segue.destination as! NavigationDataController).selectedQuarter = selectedQuarter
}
}
这可能会引起一些问题,但我不确定是可以的。也可能将场景嵌入导航控制器会搞乱自定义序列吗?数周来我一直在努力解决这个问题。我设法解决了这个问题,但是我意识到我需要这个动画。感谢任何帮助我的人。如果您需要更多代码,请随时询问。
补习班:
class SegueFromRight: UIStoryboardSegue {
override func perform() {
let src = self.source
let dst = self.destination
src.view.superview?.insertSubview(dst.view, aboveSubview: src.view)
dst.view.transform = CGAffineTransform(translationX: src.view.frame.size.width, y: 0)
UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseInOut, animations: {dst.view.transform = CGAffineTransform(translationX: 0, y: 0)}, completion: {finished in src.present(dst, animated: false, completion: nil)}
)
}
}