首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让UIEvent取消UIGestureRecognizer

让UIEvent取消UIGestureRecognizer
EN

Stack Overflow用户
提问于 2012-06-22 16:24:00
回答 1查看 1.7K关注 0票数 1

我有一个简单的滑动手势,我想成为非常低的优先级。我希望它被为视图上的控件发生的事件所取消。一开始,我以为这很简单。当一个手势发生时,很容易取消事件,但我似乎做不到相反的事情。

我的解决办法是取消这个手势,如果它与任何可以触摸的东西发生冲突。下面是我破解的代码:

代码语言:javascript
复制
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    CGPoint touch = [gestureRecognizer locationInView:self.view];
    return [self.view hitTest:touch withEvent:nil] == self.view;
}

我觉得这是解决问题的错误方法。我遗漏了什么?什么是让事件取消手势的正确方法?

关于更多的上下文,我在视图中添加了两个UISwipeGestureRecognizers (左滑动和右滑动)。视图中也有一个UISlider (嵌入式MPVolumeView的一部分)。当我移动滑块改变音量,左或右滑动会开火。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-23 13:07:34

这是做你想做的事的正确方法。您告诉手势识别器,只有当触摸直接在视图中时,它才应该开始,而不是任何子视图(根据hitTest:,这是好的,因为它允许视图决定它们是否被击中)。

总是最好是阻止它的开始,而不是试图取消它之后。但是,如果要在手势启动后取消该手势,请设置enabled = NO,然后再次返回到YES

如果需要允许某些子视图(而不是控件)的姿态,则可以测试hitTest:返回的视图是否是使用isKindOfClass:UIControl子类(例如)。

我不知道这是为了什么类型的手势,但通常您不需要这样做,因为UIKit会自动找到想要触摸的最深视图,而该视图会“吃掉”它们,这样外部手势识别器就不会得到它们--但是我可以想象,对于某些识别器/控件的组合,这种情况并不成立。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11160269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档