push模拟present转场动画
extension UINavigationController{
func pushViewControllerDownToUp(controller: UIViewController) {
let transition = CATransition()
transition.duration = 0.5
transition.type = CATransitionType.push
transition.subtype = CATransitionSubtype.fromTop
transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
view.window?.layer.add(transition, forKey: kCATransition)
pushViewController(controller, animated: false)
}
func popViewControllerTopToBottom() {
let transition = CATransition()
transition.duration = 0.5
transition.type = CATransitionType.push
transition.subtype = CATransitionSubtype.fromBottom
transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
view.window?.layer.add(transition, forKey: kCATransition)
popViewController(animated: false)
}
}
present模拟push转场动画
extension UINavigationController{
func presentViewControllerLeftToRight(controller: UIViewController, completion: (() -> Void)? = nil) {
let transition = CATransition()
transition.duration = 0.5
transition.type = CATransitionType.push
transition.subtype = CATransitionSubtype.fromRight
transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
view.window?.layer.add(transition, forKey: kCATransition)
present(controller, animated: false, completion: completion)
}
func presentDismissRightToLeft(completion: (() -> Void)? = nil) {
let transition = CATransition()
transition.duration = 0.5
transition.type = CATransitionType.push
transition.subtype = CATransitionSubtype.fromLeft
transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
view.window?.layer.add(transition, forKey: kCATransition)
dismiss(animated: false, completion: completion)
}
}