需要延迟触摸 3 指滑动而不是 1 指滑动

Posted

技术标签:

【中文标题】需要延迟触摸 3 指滑动而不是 1 指滑动【英文标题】:Need to delay touch for 3 finger swipe and not 1 finger swipe 【发布时间】:2011-10-19 20:42:50 【问题描述】:

我正在努力将手势集成到 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];

【问题讨论】:

【参考方案1】:

我找到了解决此问题的方法。您可以使用传递给各种触摸方法的 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
    

【讨论】:

【参考方案2】:

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

【讨论】:

你知道如何设置这样的东西吗? developer.apple.com/library/ios/#documentation/EventHandling/… 找到了不需要设置自定义手势识别器的解决方案。不过感谢您的帮助,这篇文章提供了一些我需要了解的多点触控事件处理方式的信息。

以上是关于需要延迟触摸 3 指滑动而不是 1 指滑动的主要内容,如果未能解决你的问题,请参考以下文章

大神,请问一下,我的电脑双指滑动失灵了该怎么办啊 华硕的电脑 win10

请教大家怎么按苹果的鼠标右键

如何在离子应用程序中检测多指触摸

手机出现无障碍,而且点了屏幕没反应怎么办?

笔记本电脑触摸板的使用技巧

菜单抽屉仅用两根手指滑动即可打开 DrawerLayout