ios - 捏合识别器崩溃

标签 ios uigesturerecognizer uipinchgesturerecognizer

我试图在 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);

崩溃发生在我设置 horizo​​ntalPinchDistance 的那一行。知道为什么吗?谢谢!

最佳答案

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

当用户抬起手指时,仍会调用捏合识别器的方法(或者如果用户没有同时抬起两根手指)。问题在于 numberOfTouches 变为 1 而不是 2。因此方法调用 [recognizer locationOfTouch:1 inView:recognizer.view] 中的索引 1 将越界。所以我的问题中的代码块应该只在 recognizer.numberOfTouches > 1 时执行。

关于ios - 捏合识别器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14476888/

相关文章:

javascript - 任何适用于 iOS 的 WebRTC 客户端实现?

ios - swift - 检查另一个类中的 uitextfield 是否为空

ios - 如何在 Swift 中识别 UIImage 数组中的 Tapped UIImage

ios - 2 GestureRecognizer 之间的区别

ios - 带有 SWRevealViewController 的 Exc_bad_instruction

iphone - 获取 UIPinchGestureRecognizer 手指位置

iphone - 如何在iphone中获取pinchgesture的坐标

iphone - 在 iOS 应用程序中使用 plist 来保留多步骤表单的数据

ios - 如何让SWRevealViewController slide "over"的main view controller 不是 "push"呢?

ios - 在主视图上添加 UIPinchGestureRecognizer 并检测 subview 上的触摸