我正在尝试检测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
的行。知道为什么吗?谢谢!
答案 0 :(得分:3)
与此同时,我找到了坠机的原因。
当用户抬起手指时,仍会调用Pinch识别器的方法(或者如果用户不同时抬起两个手指)。问题是numberOfTouches
变为1而不是2.因此方法调用[recognizer locationOfTouch:1 inView:recognizer.view]
中的索引1将超出范围。因此,我的问题中的代码块只应在recognizer.numberOfTouches > 1
。