在iOS中如何处理1至3个手指的滑动手势

8
我使用以下代码来处理我的代码中的单指滑动:
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleViewsSwipe:)];
    [swipe setDirection:UISwipeGestureRecognizerDirectionLeft];
    [swipe setDelaysTouchesBegan:YES];
    [[self view] addGestureRecognizer:swipe];

我知道我可以添加以下行来使其处理两个手指的滑动:

 [swipe setNumberOfTouchesRequired:2];

然而,当我添加了上述代码后,由于所需触摸次数现在为2,因此无法再检测到单指滑动。我该怎么做才能让我的代码适用于1、2或3个手指的滑动呢?我尝试使用以下代码,但这并不是我想要的结果。
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleViewsSwipe:)];
    [panRecognizer setMinimumNumberOfTouches:1];
    [panRecognizer setMaximumNumberOfTouches:3];
    [panRecognizer setDelaysTouchesBegan:YES];
    [[self view] addGestureRecognizer:panRecognizer];
    [panRecognizer release];

谢谢。
2个回答

12

在handleViewsSwipe方法中,您可以从手势识别器中获取numberOfTouches属性。

- (void)handleViewsSwipe:(UISwipeGestureRecognizer *)recognizer {
    NSUInteger touches = recognizer.numberOfTouches;
    switch (touches) {
        case 1:
            break;
        case 2:
            break;
        case 3:
            break;
        default:
            break;
    }
}

根据您获取的触摸数量,只需要切换相同方法的操作即可。


1
我添加了上面的代码,但是handleViewsSwipe只在触摸为1时触发。如果我尝试使用2个手指或3个手指滑动,它从未被调用过。有什么想法吗? - atbebtg
1
除了这段代码,你还需要按照Rob的建议,在视图中添加3个手势识别器。每个手势识别器对应不同数量的手指,但都可以引用同一个方法。 - MobileOverlord

10
在您的视图中添加三个滑动手势识别器:
for (int i = 1; i <= 3; ++i) {
    UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleViewsSwipe:)];
    swipe.numberOfTouchesRequired = i;
    swipe.direction = UISwipeGestureRecognizerDirectionLeft;
    swipe.delaysTouchesBegan = YES;
    [self.view addGestureRecognizer:swipe];
}

对我有用。


你好@rob mayoff,请看一下我的问题https://dev59.com/qHrZa4cB1Zd3GeqP4Zqx。我正在努力解决这个问题。请帮帮我。是否可以使用UIPangesture Recogniser来解决这个问题? - Ranjit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接