2016-07-28 3 views
0

Это то, что я делаю сейчас:Как реализовать 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:. Контроллер представлен правильный путь:

enter image description here

Но тот же результату, мне нужно, чтобы достичь с моим пользовательским Segue:

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).

+1

Конечно, как я мог забыть об этом? –