9

我收到来自 iOS 7 用户的断断续续的报告,说UIPanGestureRecognizer每隔一段时间就会停止处理某些视图。他们应该能够向右/向左滑动视图,但它只是中断并且由于某些未知原因而不起作用。强制退出应用程序并重新启动它可以解决问题。

gestureRecognizerShouldBegin这个问题在 iOS 6 上从未发生过。除了强制手势仅识别水平平移的委托之外,我没有任何代码可以随时禁用手势识别器:

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer {

    if ([gestureRecognizer isMemberOfClass:[UIPanGestureRecognizer class]]) { 

        CGPoint translation = [gestureRecognizer translationInView:[self superview]];

        if (fabsf(translation.x) > fabsf(translation.y)) {

            if (translation.x > 0)
                return YES;
        }
    }
    return NO;
}

UIPanGestureRecognizer(或只是简单的)中是否有任何UIGestureRecognizer可能导致此问题的变化?

4

2 回答 2

12

我想我终于解决了这个问题。显然,iOS 7 在子视图中处理手势的方式与在 iOS 6 及更早版本中不同。为了解决这个问题,Apple 实现了一个新的委托:

(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

如果你返回 YES,那应该让你的手势识别器工作。我已经实现了它,到目前为止还没有遇到任何问题(尽管我承认这是一个我永远无法可靠重现的罕见错误,所以它可能还没有再次发生)。

有关更多信息,请参阅 https://stackoverflow.com/a/19892166/1593765

于 2013-11-13T05:01:00.033 回答
0

为什么仅仅因为在gestureRecognizerShouldBegin:运动只是垂直的而在手势识别器中返回NO?由于是用户用手指做出的手势(而不是机器做出的),由于手指移动的不准确性,它的运动总会有一些随机性。gestureRecognizerShouldBegin: 将在用户触摸屏幕后立即调用,您获得的翻译可能只是几个像素。如果用户 ie 将手指放在屏幕上时将其向上移动 2 个像素,即使他随后将其向右移动 200 个像素,您的识别器也会失败。这不应该导致手势识别器被永久禁用,但您也应该对其进行调查,因为当他们的手势似乎无缘无故无法识别时,它可能会使用户感到困惑。

于 2013-11-14T12:30:09.733 回答