如何忽略UIGestureRecognizer触摸?

时间:2013-04-19 18:21:26

标签: ios objective-c uigesturerecognizer

我正在使用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

2 个答案:

答案 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

中添加了Tap Gesture