Как реализовать 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)
,