Как реализовать UIViewControllerTransitioningDelegate в UIStoryboardSegue?

Это то, что я делаю сейчас:

func presentOverlayController(controller: UIViewController) {

    controller.modalPresentationStyle = .Custom
    controller.transitioningDelegate = self

    presentViewController(controller, animated: true, completion: nil)
}

//MARK: - UIViewControllerTransitioningDelegate

public func presentationControllerForPresentedViewController(presented: UIViewController, presentingViewController presenting: UIViewController, sourceViewController source: UIViewController) -> UIPresentationController? {
    return OverlayPresentationController(presentedViewController: presented, presentingViewController: presenting)
}

Это работает довольно круто. Сначала я получаю контроллер из раскадровки, используя .instantiateViewControllerWithIdentifier:, Контроллер представлен правильно:

введите описание изображения здесь

Но того же результата, которого я должен достичь с помощью моего собственного перехода:

class OverlaySegue: UIStoryboardSegue, UIViewControllerTransitioningDelegate {

    override func perform() {

        destinationViewController.modalPresentationStyle = .Custom
        destinationViewController.transitioningDelegate = self
    }

    //MARK: - UIViewControllerTransitioningDelegate

    func presentationControllerForPresentedViewController(presented: UIViewController, presentingViewController presenting: UIViewController, sourceViewController source: UIViewController) -> UIPresentationController? {
        return OverlayPresentationController(presentedViewController: presented, presentingViewController: presenting)
    }
}

но это не работает. Зачем?

1 ответ

Решение

В конце perform тебе нужно позвонить presentViewController(destinationViewController, animated: true, completion: nil),

Другие вопросы по тегам