我正在使用UIGestureRecognizer
来捕捉点击...如果我不想处理特定的点击,那么手册会说:
“如果手势识别器检测到其确定的触摸不是 它的一部分手势,它可以直接将触摸传递给它的视图。去做 这个,手势识别器调用ignoreTouch:forEvent:on, 传递触摸物体。“
不幸的是,我找不到任何使用它的例子。这是我在UIGestureRecognizer
处理程序中的代码:
- (void)singleFingerTap:(UITapGestureRecognizer*)gesture {
CGPoint pt = [gesture locationInView:self.view];
CGRect dataRect = CGRectMake(117.0,416.0,670.0,1450);
CGPoint dataPoint = CGPointMake(pt.x, pt.y);
// check to see if point is within the rectangle
if(!CGRectContainsPoint(dataRect, dataPoint)) {
NSLog(@"\n\nNOT within subViewData (x: %f y: %f",dataPoint.x, dataPoint.y);
[self.view ignoreTouch:gesture];
}
else {
NSLog(@"\n\nIS within subViewData(x: %f y: %f",dataPoint.x, dataPoint.y);
}
}
我一直收到错误:
'UIView'没有可见的@interface声明选择器'ignoreTouch:'
我已经阅读了App文档,他们有我引用的内容; SO或Google上没有任何内容可以回答这个问题。非常感谢帮助(像往常一样)。 :d
答案 0 :(得分:8)
如果您想阻止识别器接收触摸,UIGestureRecognizerDelegate
有一个方法gestureRecognizer:shouldReceiveTouch:
您可以使用:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if (/* some logic here*/) {
return NO;
}
return YES;
}
如果你有多个识别器,你应该在做测试逻辑之前检查gestureRecognizer
是否是你的点击识别器。
如果您必须处理所有触摸,看起来您需要使用两个参数调用ignoreTouch:forEvent:
:
[recognizer ignoreTouch:someTouch withEvent:someEvent];
这个方法似乎只适用于UIGestureRecognizer
子类,所以我建议创建一个UITapGestureRecognizer
的子类来实现自己的自定义逻辑,以确定抽头的有效性。
答案 1 :(得分:1)
你的意思是什么过程?触摸在那里,你用它做什么,取决于你。如果你不想对它做任何事情,那就别这样做,否则做点什么。想要忽视的想法取决于你的逻辑......
我偶然发现了这个问题,但要么你用错误的条款提出问题,要么你想要别的东西:UIGestureRecognizer blocks subview for handling touch events
<强> EDIT1:强>
我的意思是我想忽略点击,因为它是另一个UIView
然后你在错误的UIView
。