添加优先于所有其他交互的 UIGestureRecognizer
Posted
技术标签:
【中文标题】添加优先于所有其他交互的 UIGestureRecognizer【英文标题】:Adding a UIGestureRecognizer taking priority over all other interactions 【发布时间】:2015-10-20 03:56:46 【问题描述】:当我点击UIButton
时,UIView
MyView 从底部出现,覆盖了屏幕的三分之一。我希望当我点击该视图之外的某个位置时,它会消失。
我曾考虑在 MyView 下方添加另一个透明的 UIView
,并在其上添加一个带有关闭功能的标签手势,但我确信还有比这更干净的东西。
所以我考虑在UIViewController
的self.view
上添加点击手势MyTapGesture 来关闭MyView。问题是,在这个视图之外,我还有其他 UIControls
和手势,它们可以同时捕获任何触摸,而不是 MyTapGesture。
如何使 MyTapGesture 成为 MyView 之外的优先手势,而忽略所有其他手势、点击等...?
【问题讨论】:
您有两个点击手势菜单? 菜单?是的,我在 self.view 的子视图上有一个点击手势。在这种情况下,两者都被触发。但是当我点击 UIButton 时,只会触发 UIButton 的点击。 这个问题解决了吗? 真的没有。点击 UIButtons 时我仍然遇到问题。我通过在我的视图下方添加一个透明视图来修复它,但如果你有正确的方法,请告诉我。 【参考方案1】:您可能必须使用手势委托方法来处理两个tapGestureRecognizer
根据场景激活您需要的一个
#pragma mark - UIGestureRecognizerDelegate methods
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
return YES;
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
if ([tapGestureRecognizer1 isEqual:gestureRecognizer])
return [tapGestureRecognizer2 isEqual:otherGestureRecognizer];
if ([tapGestureRecognizer2 isEqual:gestureRecognizer])
return [tapGestureRecognizer1 isEqual:otherGestureRecognizer];
return NO;
【讨论】:
这意味着您需要为每个 UIGesture 设置委托...好吧,假设我这样做,问题仍然存在于点击 UIButtons以上是关于添加优先于所有其他交互的 UIGestureRecognizer的主要内容,如果未能解决你的问题,请参考以下文章
UIPanGestureRecognizer 是不是优先于 -touchesMoved: 方法?
visualstudiocode颜色代码起冲突的时候优先于哪个