我收到来自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
)中是否有任何可能导致此问题的变化?
答案 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像素,也会失败。 这不应该导致手势识别器被永久禁用,但您也应该查看它,因为当他们的手势因为看似没有原因而无法被识别时,可能会使用户感到困惑。