处理动画的TransitionHandler辅助类
import UIKit
class TransitionHandler : NSObject, UIViewControllerAnimatedTransitioning, UIViewControllerTransitioningDelegate {
func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return self
}
func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return self
}
func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval {
return 0.9
}
func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
let container = transitionContext.containerView
let fromView = transitionContext.view(forKey: .from)!
let toView = transitionContext.view(forKey: .to)!
// e.g to show the animation from x axis change this frame as required
// let offScreenUp = CGAffineTransformMakeTranslation(-container.frame.size.width, 0)
// let offScreenDown = CGAffineTransformMakeTranslation(container.frame.size.width,0)
let offScreenUp = CGAffineTransform(translationX: 0, y: 0) // (-container.frame.size.width,0)
let offScreenDown = CGAffineTransform(translationX: 0, y: container.frame.size.height)
toView.transform = offScreenUp
container.addSubview(toView)
container.addSubview(fromView)
let duration = self.transitionDuration(using: transitionContext)
UIView.animate(withDuration: duration, delay: 0.0, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.8, options: [], animations: {
fromView.transform = offScreenDown
toView.transform = CGAffineTransform.identity
}, completion: { finished in
transitionContext.completeTransition(true)
})
}
}
在按钮单击时显示下一个控制器的类
class ViewController: UIViewController {
let transitionHandler = TransitionHandler()
@IBAction func showVCAnimation(sender: AnyObject) {
var storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let nextVC = storyboard.instantiateViewControllerWithIdentifier("editCategoryVC") as EditCategoryVC
nextVC.transitioningDelegate = self.transitionHandler
self.presentViewController(nextVC, animated: true, completion: nil)
}
}
感谢 AppCoda!!!