Ios 为什么此UITapGestureRecognitor无法识别水龙头?

Ios 为什么此UITapGestureRecognitor无法识别水龙头?,ios,iphone,objective-c,uigesturerecognizer,uitapgesturerecognizer,Ios,Iphone,Objective C,Uigesturerecognizer,Uitapgesturerecognizer,我的UITapGestureRecognitor有点问题。我是这样创建的: self.userInteractionEnabled = YES; UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; tapRecognizer.cancelsTouchesInView = NO; tapRecognize

我的UITapGestureRecognitor有点问题。我是这样创建的:

self.userInteractionEnabled = YES;

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
tapRecognizer.cancelsTouchesInView = NO;
tapRecognizer.delaysTouchesBegan = YES;
tapRecognizer.delegate = self;
tapRecognizer.numberOfTapsRequired = 1;
tapRecognizer.numberOfTouchesRequired = 1;
[self addGestureRecognizer:tapRecognizer];
在头文件中,我还包括并实现了
shouldReceiveTouch:
方法,如下所示:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    return YES;
}
我看过无数有类似问题的人的帖子,但似乎找不到解决办法。我听说,如果要添加手势识别器的视图的子视图的
userInteractionEnabled
设置为YES,则可能会干扰点击识别,因此我还包括以下内容:

for(UIView *subview in self.subviews) {
    subview.userInteractionEnabled = NO;
}
有人知道为什么手势识别器不工作吗?


编辑:

以下是一些细节:

  • 我正在将UIApgestureRecognitor添加到UIView子类中
  • 我在子类'
    initWithFrame:
    方法中添加了手势识别器
  • 我已经验证了手势识别器是通过单步执行代码中实际添加的部分来添加的
  • 包含此视图的视图控制器未连接任何手势识别器,但实现了
    触摸开始
    触摸移动
    触摸结束
    。然而,根据这一点,视图控制器实现这些不应影响视图的手势识别

编辑2:


我已经确认没有其他视图阻止手势识别器接收触摸。我还验证了视图是否实际添加到包含视图控制器的视图中。问题似乎出在其他地方。

您的设置应该可以正常工作,因此我猜有两种情况之一正在发生。您可能忘记实际将此视图添加到ViewController的视图中,或者可能在该视图的顶部放置了另一个视图,该视图正在窃取触摸

导致该问题的另一种可能性是,添加UIAppgestureRecognitor的视图不够大,因此当您点击屏幕时,触摸点不在视图的边界内。

还要确保UIView不透明。将背景色设置为黑色。这为我解决了问题。

此视图的父对象之一是否附加了手势识别器?@BrianShamblen-视图所在的视图控制器没有附加任何手势识别器,但它确实实现了
触摸开始:
触摸移动:
,和
touchesend:
。能否尝试将视图的背景色设置为红色?如果你能很好地看到红色视图,为你的层次结构中的所有视图设置背景色,那么你就可以判断视图是否重叠+1以进行偷拍-我已经遇到过好几次了;您认为当前视图上方的视图不会妨碍您,但确实如此。仔细检查hierarchy.Hmm中此视图上方的任何内容。我已经验证了我实际上正在将视图添加到视图控制器的视图中。我试着看看上面有没有东西,上面好像没有什么东西。我遍历了视图控制器视图的所有子视图,并记录了所有相交的子视图(结果只有一个)。然后,我通过调用
insertView:oversubview:
将视图移动到该子视图上方,并通过在视图上调用
bringsubview tofront:
对其进行双重检查。在所有这些之后,轻拍手势识别器似乎仍然不起作用。理论上,你仍然可以在有问题的视图上方看到一个视图。要查看视图层次结构(带边框)的打印输出,您可以暂停应用程序的执行并将其粘贴到控制台:po[UIApplication sharedApplication]keyWindow[rootViewController]view]recursiveDescription]您是对的。有一个视图覆盖了整个屏幕。解决了这个问题。谢谢如果UIView的alpha值设置为0(在Interface Builder或代码中),手势识别器将不会启动。但只要alpha不是零,即使背景颜色设置为“清除”,识别器也会工作。用于使屏幕的较大区域对轻触/其他手势作出响应。