Custom segue

Промучился вечер с настраиваемыми 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 )
        }
    }
 
}

Оставьте комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *