// // SideMenuTransitionContext.swift // SideMenu // // Created by kukushi on 2018/8/8. // Copyright © 2018 kukushi. All rights reserved. // import UIKit /// A internal transitioning context used for triggering the transition animation extension SideMenuController { class TransitionContext: NSObject, UIViewControllerContextTransitioning { var isAnimated = true var targetTransform: CGAffineTransform = .identity let containerView: UIView let presentationStyle: UIModalPresentationStyle private var viewControllers = [UITransitionContextViewControllerKey: UIViewController]() var isInteractive = false var transitionWasCancelled: Bool { // Our non-interactive transition can't be cancelled return false } var completion: ((Bool) -> Void)? init(with fromViewController: UIViewController, toViewController: UIViewController) { guard let superView = fromViewController.view.superview else { fatalError("fromViewController's view should have a parent view") } presentationStyle = .custom containerView = superView viewControllers = [ .from: fromViewController, .to: toViewController ] super.init() } func completeTransition(_ didComplete: Bool) { completion?(didComplete) } func viewController(forKey key: UITransitionContextViewControllerKey) -> UIViewController? { return viewControllers[key] } func view(forKey key: UITransitionContextViewKey) -> UIView? { switch key { case .from: return viewControllers[.from]?.view case .to: return viewControllers[.to]?.view default: return nil } } // swiftlint:disable identifier_name func initialFrame(for vc: UIViewController) -> CGRect { return containerView.frame } func finalFrame(for vc: UIViewController) -> CGRect { return containerView.frame } // MARK: Interactive, not supported yet func updateInteractiveTransition(_ percentComplete: CGFloat) {} func finishInteractiveTransition() {} func cancelInteractiveTransition() {} func pauseInteractiveTransition() {} } }