Я хочу реализовать пользовательский переход, используя CGAffineTransform.Я использую это в нескольких переходах.Но переход не работает, и он даже дает фатальную ошибку EXC_BAD_ACCESS в одной из сцен.Что-то странное здесь заключается в том, что переход не оживлялся на самой первой сцене 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
}
}
Это может вызвать некоторые проблемы, но я не уверен, что это так.Также, возможно, встраивание сцены в контроллер навигации испортит пользовательский переход?Я боролся с этой проблемой в течение нескольких недель.Мне удалось обойти это, но я понимаю, что мне нужна эта анимация.Спасибо, что помогли мне.Если вам нужно больше кода, не стесняйтесь спрашивать.
Класс Segue:
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)}
)
}
}
Контроллер исходного кода
После анимации (сбой)
Код и сообщение об ошибке