``` swift func pushFadeViewController(viewController: UIViewController) { self.view.layer.addAnimation(self.fadeTransaction(), forKey: nil) self.pushViewController(viewController, animated: false) } func popFadeViewController() { self.view.layer.addAnimation(self.fadeTransaction(), forKey: nil) self.popViewControllerAnimated(false) } func popFadeToRootViewController() { self.view.layer.addAnimation(self.fadeTransaction(), forKey: nil) self.popToRootViewControllerAnimated(false) } func fadeTransaction() -> CATransition { let transition = CATransition() transition.duration = 0.3 transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) transition.type = kCATransitionFade return transition } ```