123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- //
- // Created by Jake Lin on 2/27/16.
- // Copyright © 2016 IBAnimatable. All rights reserved.
- //
- import UIKit
- public class FadeAnimator: NSObject, AnimatedTransitioning {
- // MARK: - AnimatorProtocol
- public var transitionAnimationType: TransitionAnimationType = .fade(direction: .cross)
- public var transitionDuration: Duration = defaultTransitionDuration
- public var reverseAnimationType: TransitionAnimationType? = .fade(direction: .cross)
- public var interactiveGestureType: InteractiveGestureType? = .pan(from: .horizontal)
- // MARK: - private
- fileprivate var direction: TransitionAnimationType.Direction
- public init(direction: TransitionAnimationType.Direction, duration: Duration) {
- self.direction = direction
- transitionDuration = duration
- transitionAnimationType = .fade(direction: direction)
- reverseAnimationType = .fade(direction: direction.opposite)
- super.init()
- }
- }
- extension FadeAnimator: UIViewControllerAnimatedTransitioning {
- public func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
- return retrieveTransitionDuration(transitionContext: transitionContext)
- }
- public func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
- let (tempfromView, tempToView, tempContainerView) = retrieveViews(transitionContext: transitionContext)
- guard let fromView = tempfromView, let toView = tempToView, let containerView = tempContainerView else {
- transitionContext.completeTransition(true)
- return
- }
- let (_, tempToViewController, _) = retrieveViewControllers(transitionContext: transitionContext)
- if let toViewController = tempToViewController {
- toView.frame = transitionContext.finalFrame(for: toViewController)
- }
- switch direction {
- case .in:
- toView.alpha = 0
- containerView.addSubview(toView)
- case .out:
- containerView.insertSubview(toView, belowSubview: fromView)
- default:
- toView.alpha = 0
- containerView.addSubview(toView)
- }
- UIView.animate(
- withDuration: transitionDuration(using: transitionContext),
- animations: {
- switch self.direction {
- case .in:
- toView.alpha = 1
- case .out:
- fromView.alpha = 0
- default:
- fromView.alpha = 0
- toView.alpha = 1
- }
- },
- completion: { _ in
- transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
- }
- )
- }
- }
|