我正在努力将手势集成到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];
答案 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手动处理手势。然后,您可以设置具有较低阈值的自定义计时器。