我正在将 UIPanGestureRecognizer 添加到我的 View Controller 中的一个自定义 View 。
我还使用 MFSideMenu 作为滑动菜单,在其框架中将 UIPanGestureRecognizer 添加到主 NavigationViewController.view。
有时,当我在我的自定义 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,而在平移 View 本身时应该返回 NO!
问题是滑动菜单没有平移自定义 View ,而是打开了。
我几乎已经尝试了所有我能想到的 - 这种行为根本没有任何意义。
更新:仅在 iOS 7 中出现问题 - 请参阅下面我的修复答案。
最佳答案
找到了解决方案;显然问题出在 iOS 7 中。
要修复它,只需在 View Controller 中实现 UIGestureRecognizerDelegate
并实现:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
这解决了我的随机问题!
关于ios - UIPanGestureRecognizer 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20192510/