No Description

FFAnimationTransitioning.swift 2.6KB

    // // FFAnimationTransitioning.swift // FFAlert // // Created by FFIB on 2017/11/13. // Copyright © 2017年 FFIB. All rights reserved. // import UIKit class FFAnimationTransitioning: NSObject, UIViewControllerAnimatedTransitioning { private var isPresentation = false private let initialScale: CGFloat = 1.2 private let springDamping: CGFloat = 45.71 private let springVelocity: CGFloat = 0 init(presentation: Bool) { self.isPresentation = presentation } func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { return 0.5 } func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { guard let fromController = transitionContext.viewController(forKey: .from), let toController = transitionContext.viewController(forKey: .to), let fromView = fromController.view, let toView = toController.view else { return } if isPresentation { transitionContext.containerView.addSubview(toView) } let animatingController = isPresentation ? toController : fromController let animatingView = animatingController.view animatingView?.frame = transitionContext.finalFrame(for: animatingController) if isPresentation { animatingView?.transform = CGAffineTransform(scaleX: initialScale, y: initialScale) animatingView?.alpha = 0 animate({ animatingView?.transform = CGAffineTransform(scaleX: 1, y: 1) animatingView?.alpha = 1 }, context: transitionContext, withCompletion: { (finished) in transitionContext.completeTransition(finished) }) } else { animate({ animatingView?.alpha = 0 }, context: transitionContext, withCompletion: { (finished) in fromView.removeFromSuperview() transitionContext.completeTransition(finished) }) } } private func animate(_ animations: @escaping (() -> Void), context: UIViewControllerContextTransitioning, withCompletion completion: @escaping ((Bool) -> Void)) { UIView.animate(withDuration: transitionDuration(using: context), delay: 0, usingSpringWithDamping: springDamping, initialSpringVelocity: springVelocity, options: [], animations: animations, completion: completion) } }