我可以使用UIPinchGestureRecognizers来区分水平和垂直捏合吗?

时间:2012-01-30 13:39:51

标签: objective-c ios uigesturerecognizer

我有一个用户可以捏缩来增长或缩小的视图。我希望这可以沿两个轴工作 - 如果夹点大部分是水平的,它会水平地增长/收缩物体,但如果夹点大部分是垂直的,它会垂直地增长/收缩物体。

我可以使用一个或两个捏合识别器来实现这一点,如果是这样,怎么做?

1 个答案:

答案 0 :(得分: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;
}