Промучился вечер с настраиваемыми Segue. На новое окно переходило, а обратно — никак. Возвращаешь стандартный Segue — все работает. Фишка оказалась в порядке вызова функции present.
Изначальный вариант выглядел так:
class FlipSegue: UIStoryboardSegue { override func perform() { let fromViewController = self.source let toViewController = self.destination UIView.transition(from: fromViewController.view, to: toViewController.view, duration: 0.5, options: .transitionFlipFromLeft ) { fromViewController.present(toViewController, animated: false, completion: nil) } } } |
а правильный так:
class FlipSegue: UIStoryboardSegue { override func perform() { let fromViewController = self.source let toViewController = self.destination fromViewController.present(toViewController, animated: false, completion: nil) UIView.transition(from: fromViewController.view, to: toViewController.view, duration: 0.5, options: .transitionFlipFromLeft ) } } |
притом unwind segue должно быть таким:
class UnFlipSegue: UIStoryboardSegue { override func perform() { let fromViewController = self.source let toViewController = self.destination UIView.transition(from: fromViewController.view, to: toViewController.view, duration: 0.5, options: .transitionFlipFromRight) { _ in fromViewController.dismiss(animated: false, completion: nil ) } } } |