Вы можете написать собственный переход, который не будет слишком сложным, но если вы не хотите идти по этому пути, это простое исправление, которое будет работать.Нажмите на переход и отмените / отключите анимацию в переходе.Тогда в prepareForSegue используйте это.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let _ = segue.destination as? NextViewController{
let trans = CATransition()
trans.type = kCATransitionMoveIn
trans.subtype = kCATransitionFromLeft
trans.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
trans.duration = 0.35
self.navigationController?.view.layer.add(trans, forKey: nil)
}
}
Не стесняйтесь исследовать другие варианты с CATransition types .Вы можете серьезно повеселиться с ними.Теперь я предполагаю, что вы хотите иметь реверс для нажатия кнопки «назад» в следующем представлении контроллеров.Вам придется заменить кнопку «Назад» и перехватить назад, нажмите и выскочит без анимации, чтобы вы могли добавить свою собственную анимацию.Вот как это выглядело бы.
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(backTapped))
}
@objc func backTapped() {
let trans = CATransition()
trans.type = kCATransitionMoveIn
trans.subtype = kCATransitionFromRight
trans.duration = 0.3
self.navigationController?.view.layer.add(trans, forKey: nil)
navigationController?.popViewController(animated: false)
}
Опять же, другой вариант будет использовать UIViewControllerAnimatedTransitioning , но в зависимости от вашего уровня навыков и комфорта с анимациями я нахожу выше простую реализацию.