我试图在 UIPinchGestureRecognizer
的方法中检测触摸,因为我需要水平和垂直比例。在捏合时,图像应相应地调整大小。例如,如果用户仅水平移动手指,我将仅调整 View 的宽度。
它工作正常,但是当我用手指触摸屏幕时,大多数时候应用程序会因 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
的那一行。知道为什么吗?谢谢!
最佳答案
与此同时,我找到了崩溃的原因。
当用户抬起手指时,仍会调用捏合识别器的方法(或者如果用户没有同时抬起两根手指)。问题在于 numberOfTouches
变为 1 而不是 2。因此方法调用 [recognizer locationOfTouch:1 inView:recognizer.view]
中的索引 1 将越界。所以我的问题中的代码块应该只在 recognizer.numberOfTouches > 1
时执行。
关于ios - 捏合识别器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14476888/