0

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

它工作正常,但是当我将手指放在屏幕上时,大多数情况下应用程序会因 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. 知道为什么吗?谢谢!

4

1 回答 1

3

与此同时,我已经找到了崩溃的原因。

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

于 2013-01-23T13:34:12.370 回答