UIPanGestureRecognizer 与 UISwipeGestureRecognizer 重叠
Posted
技术标签:
【中文标题】UIPanGestureRecognizer 与 UISwipeGestureRecognizer 重叠【英文标题】:UIPanGestureRecognizer overlaps UISwipeGestureRecognizer 【发布时间】:2012-08-01 17:15:11 【问题描述】:我有一个UIView
,并附有一个UIPanGestureRecognizer
。
我在UIView
中也有一个对象,它有多个UISwipeGestureRecognizers
。
与对象关联的UIPanGestureRecognizer
和UISwipeGestureRecognizers
重叠。
有什么方法可以让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 时如何将超级视图与视图一起居中?