7
我有一個視圖,用戶可以捏或增長或縮小。我希望沿着兩個軸線工作 - 如果夾點大多是水平的,它會水平地增大/縮小物體,但是如果夾點大部分是垂直的,它會垂直地增大/縮小物體。我可以使用UIPinchGestureRecognizers來區分水平和垂直夾點嗎?
我可以用一個或兩個夾點識別器來實現嗎?如果是這樣,怎麼辦?
我有一個視圖,用戶可以捏或增長或縮小。我希望沿着兩個軸線工作 - 如果夾點大多是水平的,它會水平地增大/縮小物體,但是如果夾點大部分是垂直的,它會垂直地增大/縮小物體。我可以使用UIPinchGestureRecognizers來區分水平和垂直夾點嗎?
我可以用一個或兩個夾點識別器來實現嗎?如果是這樣,怎麼辦?
您可能可以使用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;
}
好辦法! – perrohunter 2012-09-17 04:52:19
不錯,但是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
你說的最後一個'y'需要是'x'。我修正了這個問題。感謝您的注意。但是,不需要檢查零除,因爲它會產生浮點無窮大,後續的條件表達式可以正確處理。 – 2013-02-04 17:59:18