需要延迟触摸3手指轻扫而不是1手指轻扫

时间:2011-10-19 20:42:50

标签: ios ipad uigesturerecognizer

我正在努力将手势集成到iPad的绘图应用程序中。例如,我想要用三根手指向左滑动以撤消绘图步骤。

我遇到阻止触摸数据转到touchesBegan:withEvent:导致在执行手势时对屏幕进行绘制的问题。

如果我使用delayTouchesBegan属性,我可以阻止三指滑动传递此触摸数据。但是,当用户尝试绘制向左的线时,它也会延迟绘图。这导致线条开始远离用户开始绘制的位置。

如何确保我的应用仅延迟三指滑动而不是单指滑动?

UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];

recognizer.numberOfTouchesRequired = 3;
recognizer.direction = UISwipeGestureRecognizerDirectionLeft;
recognizer.delaysTouchesBegan = YES;

[self.view addGestureRecognizer:recognizer];

2 个答案:

答案 0 :(得分:2)

我找到了解决这个问题的方法。您可以使用传递给各种触摸方法的UIEvent来检测触摸次数,而不是使用手势识别器的delayTouchesBegan属性。然后只需限制touchBegan中的动作:withEvent:,touchesMoved:withEvent:和touchesEnded:withEvent:方法仅在单次触摸时执行。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    //only process touch data if there is a single touch
    if ([[event allTouches] count] == 1) {
        //draw
    }
}

答案 1 :(得分:1)

这是手势的已知问题。没有办法解决它,除了选择退出UISwipeGestureRecognizer并使用touchesBegan / Ended手动处理手势。然后,您可以设置具有较低阈值的自定义计时器。