1

我在使用UITapGestureRecognizer时遇到了一些问题。我创建这样说:这个UITapGestureRecognizer为什么不识别水龙头?

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; 
} 

任何人都知道为什么手势识别器不起作用?


编辑:

这里还有一些细节:

  • 我加入了UITapGestureRecognizer到UIView子类。
  • 我在子类'initWithFrame:方法中添加手势识别器。
  • 我已验证手势识别器是通过逐步添加实际添加的代码部分来添加的。
  • 包含此视图的视图控制器没有附加任何手势识别器,但确实执行了touchesBegan,touchesMovedtouchesEnded。但是,根据question,视图控制器实现这些应该不会影响视图的手势识别。


编辑2:

我已验证有接收来自触摸阻断与手势识别器视图中没有其他视图。我也验证过,视图实际上被添加到了包含视图控制器的视图中。这似乎是其他地方的问题。

+0

此视图的其中一个父对象是否附加了手势识别器? –

+0

@BrianShamblen - 视图所在的视图控制器没有附加任何手势识别器,但它实现了'touchesBegan:','touchesMoved:'和'touchesEnded:'。 – pasawaya

+0

你可以尝试将视图的背景颜色设置为红色吗?如果你可以看到红色视图正常,为层次结构中的所有视图设置背景颜色,那么你可以判断视图是否重叠 – vodkhang

回答

2

你的设置应该工作,所以我猜想有两件事情中的一件正在发生。你可能忘记了实际上将这个视图添加到ViewController的视图中,或者在这个视图的顶部放置了另一个视图来窃取触摸?

+0

用于窃取触摸 - 我碰到过几次;你认为目前的观点不会妨碍事情的发展,但事实确实如此。仔细检查层次结构中可能高于此视图的任何内容。 – Chris

+0

嗯。我已经验证我实际上是将视图添加到视图控制器的视图。我会试着看看有没有放在它上面的东西。 – pasawaya

+0

它似乎没有任何东西在它之上。我遍历所有视图控制器视图的子视图并记录了所有相交的子视图(原来只有一个)。然后我通过调用'insertView:aboveSubview:'移动子视图上方的视图,并通过在视图上调用'bringSubviewToFront:'对其进行双重检查。在所有这些之后,轻拍手势识别器似乎仍然不起作用。 – pasawaya

0

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

0

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

相关问题