smeshko smeshko - 28 days ago 13
Swift Question

UIViewControllerTransitioningDelegate methods not called

I am trying to implement a custom popup with custom transitions, but my delegate methods are not being called at all. This is my transitioning delegate:

public final class ModalTransitioningDelegate: NSObject, UIViewControllerTransitioningDelegate {

public func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
let controller = ModalPresentationController(presentedViewController: presented, presenting: presenting)

return controller
}

public func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return ModalAnimationPresenter()
}

public func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return ModalAnimationDissmiser()
}
}


This is my popup view controller:

class StopWorkoutViewController: UIViewController {

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
commonInit()
}

func commonInit() {

let transitioner = ModalTransitioningDelegate()
modalPresentationStyle = .custom
transitioningDelegate = transitioner
}
}


This is how I present the popup:

@IBAction func test(_ sender: Any) {
let popup = UIStoryboard(name: "Popups", bundle: nil).instantiateInitialViewController() as! StopWorkoutViewController
present(popup, animated: true, completion: nil)
}


And this is the view controller in IB:

Popup ViewController

The popup is presented, but full-screen.

Answer

This is wrong

 func commonInit() {

        let transitioner = ModalTransitioningDelegate()
        modalPresentationStyle = .custom
        transitioningDelegate = transitioner
    }

Since you are going to animate the transition of StopWorkoutViewController.You need to set the transition delegate as

 @IBAction func test(_ sender: Any) {
    let transitioner = ModalTransitioningDelegate()
    let popup = UIStoryboard(name: "Popups", bundle: nil).instantiateInitialViewController() as! StopWorkoutViewController
    popup.transitioningDelegate = transitioner
    present(popup, animated: true, completion: nil)
}