UIPanGestureRecognizer发生冲突

时间:2013-11-25 11:58:17

标签: ios uigesturerecognizer slidingmenu uipangesturerecognizer

我将UIPanGestureRecognizer添加到视图控制器中的一个自定义视图中。

我也在使用MFSideMenu进行滑动菜单,在其框架中将UIPanGestureRecognizer添加到主NavigationViewController.view。

有时当我在自定义视图中平移时,平移实际上发生在MavigationViewController.view中。

导致此问题的原因是MFSideMenu实现中的以下代码:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

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

     if([gestureRecognizer.view isEqual:self.rootViewController.view] &&
       [self rootViewControllerPanEnabled])
      {
        return YES;
      }

   return NO;
  }

}

有时候(5-10中有1个),此方法返回YES,在视图本身平移时应返回NO!

问题在于,不是平移自定义视图,而是打开滑动菜单。

我已经尝试了所有我能想象到的东西 - 这种行为根本没有任何意义。

更新:仅在iOS 7中出现问题 - 请参阅下面的修复答案。

1 个答案:

答案 0 :(得分:1)

找到解决方案;显然问题出在iOS 7中。

要修复它,只需在视图控制器中实现UIGestureRecognizerDelegate并实现:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

这解决了我的随机问题!

UIPanGestureRecognizer sometimes not working on iOS 7

的信用