                 animationRatio = (location.x - self.panLocationStart) / CGRectGetWidth(bounds)
             }
             
-            if self.contentScrollView != nil && animationRatio <= 0 {
-                self.startGestureTransition()
-                self.contentScrollView!.bounces = false
+            if animationRatio < 0 {
+                animationRatio = 0
+            }
+            
+            if let _contentScrollView = self.contentScrollView {
+                if self.isTransitioning == false && _contentScrollView.contentOffset.y <= 0 {
+                    self.startGestureTransition()
+                    self.contentScrollView!.bounces = false
+                } else {
+                    self.updateInteractiveTransition(animationRatio)
+                }
             } else {
                 self.updateInteractiveTransition(animationRatio)
             }

    
    // interactive gesture
    
    public weak var gestureTargetView : UIView?
    public var panCompletionThreshold : CGFloat = 100.0
    public var direction : ARNTransitionAnimatorDirection = .Bottom
    public var contentScrollView : UIScrollView? {

        
        self.gesture = UIPanGestureRecognizer(target: self, action: "handlePan:")
        self.gesture!.delegate = self
        self.gesture!.maximumNumberOfTouches = 1
        
        if let _gestureTargetView = self.gestureTargetView {
            _gestureTargetView.addGestureRecognizer(self.gesture!)
