UIPanGestureRecognizer有时无法在iOS 7上运行

时间:2013-10-13 15:16:45

标签: ios uigesturerecognizer

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

这个问题在iOS 6上从未发生过。除了gestureRecognizerShouldBegin代表强制手势只能识别水平平底锅之外,我没有任何禁用手势识别器的代码:

- (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)中是否有任何可能导致此问题的变化?

2 个答案:

答案 0 :(得分:12)

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

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

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

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

答案 1 :(得分:0)

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