         activeContext = transitionContext
         prepForPop()
     }
-
-    // MARK: Private / Convenience
-    
-    func prepForPop() {
-        
-        guard let transitionContext = activeContext,
-            let fromView = transitionContext.view(forKey: UITransitionContextViewKey.from),
-            let toView = transitionContext.view(forKey: UITransitionContextViewKey.to) else {
-                return
-        }
-        
-        let container = transitionContext.containerView
-        let containerBounds = container.bounds
-        
-        frontContainerView.frame = containerBounds
-        
-        let maxOffset = containerBounds.size.width * maxBackViewTranslationPercentage
-
-        fromView.frame = frontContainerView.bounds
-        frontContainerView.addSubview(fromView)
-        frontContainerView.transform = CGAffineTransform.identity
-        
-        toView.frame = containerBounds
-        toView.transform = CGAffineTransform(translationX: -maxOffset, y: 0)
-        
-        backOverlayView.frame = containerBounds
-        
-        container.addSubview(toView)
-        container.addSubview(backOverlayView)
-        container.addSubview(frontContainerView)
-    }
-    
-    func updateViewsWithTranslation(_ translation: CGPoint) {
-        
-        guard let transitionContext = activeContext,
-            let toView = transitionContext.view(forKey: UITransitionContextViewKey.to) else {
-                return
-        }
-        
-        let container = transitionContext.containerView
-        let maxDistance = container.bounds.size.width
-        let percent = percentDismissedForTranslation(translation, container: container)
-
-        let maxFromViewOffset = maxDistance
-
-        let maxToViewOffset = maxDistance * maxBackViewTranslationPercentage
-        let resolvedToViewOffset = -maxToViewOffset + (maxToViewOffset * percent)
-        
-        frontContainerView.transform = CGAffineTransform(translationX: maxFromViewOffset * percent, y: 0)
-        frontContainerView.dropShadowView.alpha = (1.0 - percent)
-        toView.transform = CGAffineTransform(translationX: resolvedToViewOffset, y: 0)
-        backOverlayView.alpha = (1.0 - percent)
-        
-        activeContext?.updateInteractiveTransition(percent)
-    }
-    
-    func shouldCancelForGestureEndingWithTranslation(_ translation: CGPoint, velocity: CGPoint) -> Bool {
+    
+    // MARK: File Private Methods
+    
+    fileprivate func shouldCancelForGestureEndingWithTranslation(_ translation: CGPoint, velocity: CGPoint) -> Bool {
         
         guard let transitionContext = activeContext else {
             return false

        backgroundColor = UIColor.clear
    }
    
    static func newDropShadowView() -> UIView {
        let w: CGFloat = 10.0
        
        let stretchableShadow = UIImageView(frame: CGRect(x: 0, y: 0, width: w, height: 1))

    
}

fileprivate let defaultCancelPopDuration: TimeInterval = 0.16
fileprivate let maxBackViewTranslationPercentage: CGFloat = 0.30
fileprivate let minimumDismissalPercentage: CGFloat = 0.5
fileprivate let minimumThresholdVelocity: CGFloat = 100.0

@objc(JTSInteractivePopAnimator)
fileprivate class InteractivePopAnimator: NSObject, UIViewControllerAnimatedTransitioning, UIViewControllerInteractiveTransitioning {
    
    // MARK: Fileprivate Properties
    
    var translation: CGPoint = CGPoint.zero {
        didSet {
