UIPanGestureRecognizer 与 UISwipeGestureRecognizer 重叠

Posted

技术标签:

【中文标题】UIPanGestureRecognizer 与 UISwipeGestureRecognizer 重叠【英文标题】:UIPanGestureRecognizer overlaps UISwipeGestureRecognizer 【发布时间】:2012-08-01 17:15:11 【问题描述】:

我有一个UIView,并附有一个UIPanGestureRecognizer。 我在UIView 中也有一个对象,它有多个UISwipeGestureRecognizers

与对象关联的UIPanGestureRecognizerUISwipeGestureRecognizers 重叠。

有什么方法可以让UIPanGestureRecognizer 完全忽略UIView 的某个区域,或者让对象的UISwipeGestureRecognizers 优先并覆盖UIView's UIPanGestureRecognizer

【问题讨论】:

【参考方案1】:

你想要的是……

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

     if(gestureRecognizer == myPanGesture) return NO;

     return YES;

或该委托方法的类似用法。它是 UIGestureRecognizerDelegate 协议的一部分。如果您正在滑动,这将使您无法识别平移。

【讨论】:

还有其他建议吗?我注意到在该方法的文档中它说“......返回 NO 不能保证防止同时识别,因为其他手势的代表可能会返回 YES”。我应该对我的代表做一些不同的事情吗?【参考方案2】:

使用这个委托方法解决了这个问题:

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

      if ([touch.view isKindOfClass:[UIButton class]] && gestureRecognizer == recognizer) return NO;
      return YES;

感谢@MikeS 为我指明正确的方向

【讨论】:

【参考方案3】:

非常感谢您的回答,这对我的问题有所帮助。

我只想分享我的解决方案,因为它可能会有所帮助:

-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
NSLog2(@"Gesture on Class %@ tag %i", [touch.view class], touch.view.tag);////////

if (touch.view.tag == kTagToIgnoreGestures)
    return NO;

return YES;

我定义了一个 kTagToIgnoreGestures,它是应该忽略手势的视图标签。 通过这种方式,我可以使用 UIGestureRecognizer 在一个视图中拥有 2 个子视图,其中只有一个会受到手势的影响。

希望对您有所帮助。谢菲

【讨论】:

以上是关于UIPanGestureRecognizer 与 UISwipeGestureRecognizer 重叠的主要内容,如果未能解决你的问题,请参考以下文章

UIPangestureRecognizer - 一个图像与另一个图像相交

与 UITableView 的超级视图上的 UIPanGestureRecognizer 冲突

使用 UIPanGestureRecognizer 时如何将超级视图与视图一起居中?

UIPanGestureRecognizer 起点已关闭

带有 UIScrollView 的 UIPanGestureRecognizer

UIPanGestureRecognizer中的Velocity和translation开始状态