UIPanGestureRecognizer有时无法在iOS 7上运行

bmu*_*ler 9 uigesturerecognizer ios

我收到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;
}
Run Code Online (Sandbox Code Playgroud)

可能导致此问题的UIPanGestureRecognizer(或仅仅是平原UIGestureRecognizer)有什么变化吗?

bmu*_*ler 12

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

(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
Run Code Online (Sandbox Code Playgroud)

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

有关更多信息,请参阅 /sf/answers/1392451651/.