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

标签 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];

最佳答案

我找到了解决这个问题的办法。除了使用手势识别器的 delayTouchesBegan 属性,您还可以使用传递到各种触摸方法的 UIEvent 来检测触摸次数。然后将touchBegan:withEvent:、touchesMoved:withEvent:和touchesEnded:withEvent:方法中的 Action 限制为仅在单次触摸时执行。

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

关于ios - 需要延迟 3 指滑动而不是 1 指滑动的触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7827860/

相关文章:

ios - 如何在 Swift 中创建一个内联字典,同时忽略可能为 nil 的可选值?

ios - 我可以取消 UILongPressGestureRecognizer,关闭 View 并长按以识别下面的 View 吗?

ios - 使用长按时出现两个 Action 表

ios - 使用 firebase key 执行以下操作会产生过多的成本吗?

ios - Objective-C 或 Swift 中的 Jaro Winkler 距离

iphone - 默认情况下在 MPMoviePlayerViewController 中显示字幕

iphone - 如何在动画与不动画时不重复此代码?

objective-c - 在 UIPopoverController 中丢失手势识别器

ios - 当通话状态栏可见时,UIButtons 的点击区域会发生变化

iOS 8.2 [NSUserDefaults standardUserDefaults] 返回 nil