2016-07-28 18 views
0

Dies ist, was ich jetzt tun:Wie UIViewControllerTransitioningDelegate in UIStoryboardSegue zu implementieren?

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

Es ziemlich genial funktioniert. Zuerst bekomme ich den Controller vom Storyboard mit .instantiateViewControllerWithIdentifier:. Controller ist die richtige Art und Weise präsentiert:

enter image description here

Aber das gleiche Ergebnis muss ich mit meiner benutzerdefinierten segue erreichen:

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

aber es funktioniert nicht. Warum?

Antwort

1

Am Ende von perform müssen Sie presentViewController(destinationViewController, animated: true, completion: nil) anrufen.

+1

Natürlich, wie könnte ich das vergessen? –