             toControllerInteractive?.view.layer.timeOffset = CFTimeInterval(timeOffset)
             fromControllerInteractive?.view.layer.timeOffset = CFTimeInterval(timeOffset)
         case .cancelled, .ended:
+            // finish animation relatively velocity
+            let velocity = sender.velocity(in: view)
+            if abs(velocity.x) > 32.0 {
+                timerVelocity = 2.0
+                willFinishAnimationTransition = true
+            } else {
+                timerVelocity = 1.0
+            }
+            
             interactiveTransitionInProgress = false
             if fromControllerInteractive != nil, toControllerInteractive != nil {
                 startTimerForInteractiveTransition()

        
        // setup animation
        
        let kAnimation: Float = 2.0
        let speed = panGesture.state != .changed ? kAnimation : 0.0
        
        let animationPositionToController = CABasicAnimation(keyPath: "position.x")

            break
        }
    }
    
    func swipeAction(direction: AnimationDirection) {
        if direction == .right {
            let index = selectedIndex! - 1
            if index >= 0 {
                selectController(atIndex: index, animated: isEnabledAnimation)
            }
        } else {
            let index = selectedIndex! + 1
            if index <= viewControllers.count - 1 {
                selectController(atIndex: index, animated: isEnabledAnimation)
            }
        }
    }


}
