6

UIGestureRecognizer用来捕捉水龙头......如果我不想处理特定的水龙头,手册说:

“如果手势识别器检测到它确定不是其手势的一部分的触摸,它可以将触摸直接传递给它的视图。为此,手势识别器在其自身上调用 ignoreTouch:forEvent:,传入触摸对象。”

不幸的是,我找不到任何使用它的例子。这是我在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:”

我已经阅读了应用程序文档,他们有我引用的内容;SO或Google上没有任何东西可以回答这个问题。非常感谢帮助(像往常一样)。:D

4

2 回答 2

9

如果您想完全阻止识别器接收触摸,可以使用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来实现你自己的自定义逻辑来确定水龙头的有效性。

于 2013-04-19T18:26:20.967 回答
1

你说的过程是什么?触摸就在那里,你用它做什么,取决于你。如果您不想对它做任何事情,那就不要做,否则做某事。想要忽略的想法取决于你的逻辑......

我偶然发现了这个问题,但要么你用错误的术语提出了这个问题,要么你想要别的东西:UIGestureRecognizer blocks subview for handling touch events

编辑1:

我的意思是我想忽略水龙头,因为它是另一个 UIView

然后你在错误的地方添加了点击手势UIView

于 2013-04-19T18:28:55.383 回答