2012-01-30 26 views

回答

12

您可能可以使用UIPinchGestureRecognizer來做這件事,但您必須編寫代碼來確定夾點是水平還是垂直。我沒有測試過這個:

typedef enum { 
    PinchAxisNone, 
    PinchAxisHorizontal, 
    PinchAxisVertical 
} PinchAxis; 

PinchAxis pinchGestureRecognizerAxis(UIPinchGestureRecognizer *r) { 
    UIView *view = r.view; 
    CGPoint touch0 = [r locationOfTouch:0 inView:view]; 
    CGPoint touch1 = [r locationOfTouch:1 inView:view]; 
    CGFloat tangent = fabsf((touch1.y - touch0.y)/(touch1.x - touch0.x)); 
    return 
     tangent <= 0.2679491924f ? PinchAxisHorizontal // 15 degrees 
     : tangent >= 3.7320508076f ? PinchAxisVertical // 75 degrees 
     : PinchAxisNone; 
} 
+0

好辦法! – perrohunter 2012-09-17 04:52:19

+0

不錯,但是1.我認爲你的意思是'fabsf((touch1.y - touch0.y)/(touch1.x - touch0.x))',最後一個組件是'x'。 2.您應該首先檢查垂直方向,如果(touch1.x == touch0.x)返回PinchAxisVertical;'以防止被零除; 3.請注意,這將測試兩個手指相對於彼此的角度,而不是手指的相對移動。基本的三角法可以應用於實際看待三角形的東西,但這更多的是「手指位置的角度」,而不是「手指運動的角度」。 – Rob 2013-02-04 13:48:17

+0

你說的最後一個'y'需要是'x'。我修正了這個問題。感謝您的注意。但是,不需要檢查零除,因爲它會產生浮點無窮大,後續的條件表達式可以正確處理。 – 2013-02-04 17:59:18