首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在iOS6中处理手势识别器

在iOS6中处理手势识别器
EN

Stack Overflow用户
提问于 2012-09-20 18:06:57
回答 3查看 6.3K关注 0票数 14

显然,当您在同一个位置拥有一个手势识别器和一个iOS时,UIButton 6会尝试自动处理这种情况,并为相同的手势进行激活。

这种新的自动处理解决了当您想要单击按钮而不是激活手势识别器时的问题,但是当您希望手势识别器工作时,会创建一个新的问题

在iOS 5中,您可以实现:

代码语言:javascript
复制
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

若要在冲突中将操作传递给UIButton,请执行以下操作。

这在iOS 6中似乎不起作用。而且,倒转此方法的行为(因为现在UIButton拥有优先级而不是手势识别器)将无法工作。

完整方法:

代码语言:javascript
复制
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([touch.view isKindOfClass:[UIControl class]]){
        return NO;
    }
    return YES;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-03 14:40:41

我这样做是为了解决这个问题,根据您认为合适的情况来修改它:

代码语言:javascript
复制
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
      [self MyCommonSelector];// this will work for ios 5
      return Yes;
 }

在您声明的按钮中添加目标,这样它将调用iOS 6:

代码语言:javascript
复制
[self.myButton addTarget:self action:@selector(MyCommonSelector)
  forControlEvents:UIControlEventTouchUpInside];

在这个方法中做你的事情,这个方法也会在按钮上被调用,点击并从你需要调用的手势:

代码语言:javascript
复制
-(void)MyCommonSelector
 {
    //Do your stuff here what you want to do with Gesture too.
 }
票数 6
EN

Stack Overflow用户

发布于 2012-09-20 19:27:26

虽然我不知道如果您不希望访问UIButtons,为什么要将它们放在那里,但是您可以通过覆盖包含视图的-hitTest:withEvent:方法来防止子视图接收触摸。

默认情况下,-hitTest:withEvent:返回“视图层次结构中包含指定点的接收器的最远后代”,因此默认情况下,当单击其中一个按钮时,包含的视图将返回该按钮。

您的实现应该如下所示:

代码语言:javascript
复制
- (UIView *)hitTest:(CGPoint)aPoint withEvent:(UIEvent *)event {
    if ([self pointInside:aPoint]) {
        return self;
    } else {
        return nil;
    }
}

因此,如果您正在调用的容器视图包含触摸点,则它将返回自身,并且附加到其上的手势识别器将得到触摸。

因为这个实现永远不会返回任何子视图,所以没有一个UIButtons会有机会对触点做出响应。

票数 0
EN

Stack Overflow用户

发布于 2012-09-20 19:39:14

我知道这看起来很简单,但是您考虑过将UIButton的userInteractionEnabled属性设置为"NO“吗?这应该会自动从命中测试和手势识别系统中删除。

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

https://stackoverflow.com/questions/12518328

复制
相关文章

相似问题

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