 
         self.rightOffset = 0
         self.leftOffset = 0
+        resetPanGestureTranslation()
+        isAnimating = false
+    }
+    
+    func resetPanGestureTranslation(){
         let translation = panGestureRecognizer.translationInView(self)
         panGestureRecognizer.setTranslation(CGPointMake(0, translation.y), inView: self)
-        isAnimating = false
     }
     
     func circleCurrentPath() -> UIBezierPath {
         
-        //default
         leftPoint = CGPoint(x: leftOffset, y: circleSize/2)
-        topPoint = CGPoint(x: circleSize/2, y: 0)
         rightPoint = CGPoint(x: circleSize+rightOffset, y: circleSize/2)
-        bottomPoint = CGPoint(x: circleSize/2, y: circleSize)
-        
+        //direction left right
+        if fabs(leftOffset) > fabs(rightOffset){
+            topPoint = CGPoint(x: circleSize/2 + rightOffset, y: 0)
+            bottomPoint = CGPoint(x: circleSize/2 + rightOffset, y: circleSize)
+        }else{
+            topPoint = CGPoint(x: circleSize/2 + leftOffset, y: 0)
+            bottomPoint = CGPoint(x: circleSize/2 + leftOffset, y: circleSize)
+        }
+    
         //control point
         let controlPointLeft : CGFloat = topPoint.x - leftPoint.x
         let controlPointRight : CGFloat = rightPoint.x - topPoint.x

        if iconSelectedIndex != -1 && buttonSelectedCallback != nil {

            buttonSelectedCallback!( icons[iconSelectedIndex], WAPullToShareButtonType(rawValue: icons[iconSelectedIndex].tag)!)
            
        }
    }
    

                    }
                }
            }else{
                resetPanGestureTranslation()
                deselectItem()
            }
        }
