捏识别器崩溃

时间:2013-01-23 10:00:36

标签: ios uigesturerecognizer uipinchgesturerecognizer

我正在尝试检测UIPinchGestureRecognizer方法中的触摸,因为我需要水平和垂直刻度。在捏合时,应相应调整图像大小。例如,如果用户仅水平移动手指,我只调整视图的宽度。

它工作正常,但是当我抓住屏幕的时候,大多数时候应用程序崩溃了SIGABRT而没有消息。

我的代码是:

    if (recognizer.state == UIGestureRecognizerStateBegan) {
        previousHorizontalPinchDistance = ABS([recognizer locationOfTouch:1 inView:recognizer.view].x - [recognizer locationOfTouch:0 inView:recognizer.view].x);
        previousVerticalPinchDistance = ABS([recognizer locationOfTouch:1 inView:recognizer.view].y - [recognizer locationOfTouch:0 inView:recognizer.view].y);
    }
    CGFloat horizontalPinchDistance = ABS([recognizer locationOfTouch:1 inView:recognizer.view].x - [recognizer locationOfTouch:0 inView:recognizer.view].x);
    CGFloat verticalPinchDistance = ABS([recognizer locationOfTouch:1 inView:recognizer.view].y - [recognizer locationOfTouch:0 inView:recognizer.view].y);

崩溃发生在我设置horizontalPinchDistance的行。知道为什么吗?谢谢!

1 个答案:

答案 0 :(得分:3)

与此同时,我找到了坠机的原因。

当用户抬起手指时,仍会调用Pinch识别器的方法(或者如果用户不同时抬起两个手指)。问题是numberOfTouches变为1而不是2.因此方法调用[recognizer locationOfTouch:1 inView:recognizer.view]中的索引1将超出范围。因此,我的问题中的代码块只应在recognizer.numberOfTouches > 1

时执行