Ios UIPangestureRecognitor冲突

Ios UIPangestureRecognitor冲突,ios,uigesturerecognizer,slidingmenu,uipangesturerecognizer,Ios,Uigesturerecognizer,Slidingmenu,Uipangesturerecognizer,我正在向视图控制器中的一个自定义视图添加UIPangestureRecognitor 我还将MFSideMenu用于滑动菜单,它在其框架中向主NavigationViewController.view添加了一个UIPangestureRecognitor 有时,当我在自定义视图中平移时,平移实际上发生在MavigationViewController.view中 导致此问题的原因是的MFSideMenu实现中的以下代码: - (BOOL)gestureRecognizer:(UIGestureR

我正在向视图控制器中的一个自定义视图添加UIPangestureRecognitor

我还将MFSideMenu用于滑动菜单,它在其框架中向主NavigationViewController.view添加了一个UIPangestureRecognitor

有时,当我在自定义视图中平移时,平移实际上发生在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中-请参阅下面我的答案以了解修复方法。

找到了解决方案;显然问题出在iOS 7上

要解决此问题,只需在视图控制器中实现
UIgestureRecognitizerDelegate
,然后实现:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}
这已经解决了我的随机问题


归功于

我猜您的自定义视图将添加到根视图,因此它将触发根视图类中的手势识别器。我将尝试查看是否可以在自定义类中的委托手势方法处理程序中将根视图中的rootViewControllerPanEnable变量设置为“否”(如果计时有效)。