Search code examples
swifttvos

UIViewControllerTransitioningDelegate on tvOS not being called


So I'm trying to do an animated transition between viewcontrollers on tvOS 10.

The UIViewControllerTransitioningDelegate protocol is available on tvOS so I assumed I could animate it as well. But for some reason none of the functions are ever called when presenting the new viewcontroller.

I have no idea what I'm doing wrong since I'm doing basically the exact same on iOS.

Here is the code I'm using:


Presenting code

func showStuff() {
    let viewController = ResultViewController()
    viewController.transitioningDelegate = ResultViewControllerTransitionManager()
    viewController.modalPresentationStyle = .custom
    navigationController?.present(viewController, animated: true, completion: nil)
}

Transition Delegate

class ResultViewControllerTransitionManager: NSObject, UIViewControllerAnimatedTransitioning, UIViewControllerTransitioningDelegate {
    var duration = 0.5
    var isPresenting = false

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return duration
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        guard let fromView = transitionContext.view(forKey: UITransitionContextViewKey.from) else {return}
        guard let toView = transitionContext.view(forKey: UITransitionContextViewKey.to) else {return}

        (...)
    }

    func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        isPresenting = false
        return self
    }

    func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        isPresenting = true
        return self
    }
}

Solution

  • So apparently initialising the animationmanager in the showStuff() function was the problem. Storing it as a property in the Main viewcontroller and passing it along did work.