多个UITapGestureRecognizer无法在UIScrollView上运行

问题描述 投票:1回答:2

我想在UITapGestureRecognizer上添加多个UIScrollView,但它只识别一个手势。 我想为触摸开始添加第一个手势,为触摸结束事件添加第二个手势。

以下是我的代码: -

self.tapStartGesture = [[UITapGestureRecognizer alloc] initWithTarget:self  action:@selector(tapGesture:)];
self.tapStartGesture.numberOfTapsRequired = 1;
self.tapStartGesture.numberOfTouchesRequired = 1;
[self.tapStartGesture setState:UIGestureRecognizerStateBegan];
[self.scrollView addGestureRecognizer:self.tapStartGesture];

self.tapEndGesture = [[UITapGestureRecognizer alloc] initWithTarget:self  action:@selector(tapGesture:)];
self.tapEndGesture.numberOfTapsRequired = 1;
self.tapEndGesture.numberOfTouchesRequired = 1;
[self.scrollView addGestureRecognizer:self.tapEndGesture];

- (void)tapGesture:(UITapGestureRecognizer *)sender {
    if(sender==self.tapStartGesture) {
        NSLog(@"tapStartGesture");
    } else if(sender==self.tapEndGesture) {
        NSLog(@"tapEndGesture");
    }
}
ios objective-c uiscrollview gesture uitapgesturerecognizer
2个回答
2
投票

轻击手势只有一个状态 - “已结束”。您无法使用点击手势检测到点按开始的时间。正如您所见,尝试使用两个轻击手势并不能达到您想要的效果。

你需要实现UIResponder方法touchesBegantouchesEnded

您可能还想看看UITapGestureRecognizer - make it work on touch down, not touch up?


0
投票

问题通过实现自定义手势解决。

文件:-MyGesture.h

#import <UIKit/UIKit.h>
@interface MyGesture : UIGestureRecognizer
@end

文件:-MyGesture.m

#import "MyGesture.h"
@implementation MyGesture    
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    if (self.state == UIGestureRecognizerStatePossible) {;
        self.state = UIGestureRecognizerStateBegan;
    }
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    self.state = UIGestureRecognizerStateEnded;
}    
@end

如何使用:-

MyGesture *gesture = [[MyGesture alloc] initWithTarget:self action:@selector(myGesture:)];
[self.scrollView addGestureRecognizer:gesture];

- (void)myGesture:(MyGesture *)sender {
    if (sender.state == UIGestureRecognizerStateBegan) {
        NSLog(@"tapStartGesture");
    } else if (sender.state == UIGestureRecognizerStateEnded) {
        NSLog(@"tapEndGesture");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.