1

I want to change the direction when I pop a view controller. Below is the code I am using. I want to pop the controller from right (just a opposite direction when push a view controller) but it doesn't work. It just fade out gradually. How can I make the animation to be fading out from the right?

let transition = CATransition()
        transition.duration = 0.3
        transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
        transition.type = kCATransitionFromRight

        self.navigationController?.view.layer.addAnimation(transition, forKey: nil)
        self.navigationController?.popToRootViewControllerAnimated(false)
Joey Yi Zhao
  • 37,514
  • 71
  • 268
  • 523

1 Answers1

1

Try using SOLPresentingFun library

Sample code:

func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning?{
    switch operation{
    case .Push where toVC.isKindOfClass("Your new View Controller class name"):
        let animator = SOLSlideTransitionAnimator()
        animator.appearing = true
        animator.duration = 0.25
        animator.edge = .Left //Direction from which you want to slide the new controller in
        return animator
    case .Pop where fromVC.isKindOfClass("Your new View Controller class name"):
        let animator = SOLSlideTransitionAnimator()
        animator.appearing = false
        animator.duration = 0.25
        animator.edge = .Left//Direction to which you want to slide the new controller out
        return animator
     }
    return nil
    }

Of course you have to set your base controller as the navigation controller delegate

self.navigationController?.delegate = self

and confirm that your base controller implements UINavigationControllerDelegate

nishith Singh
  • 2,968
  • 1
  • 15
  • 25