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