Несколько UITapGestureRecognizer не работает на UIScrollView - PullRequest
1 голос
/ 29 апреля 2019

Я хочу добавить несколько 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");
    }
}

Ответы [ 2 ]

2 голосов
/ 29 апреля 2019

Жест касания имеет только одно состояние - «закончен». Вы не можете определить, когда нажатие начинает использовать жест касания. Как вы уже видели, попытка использовать два жеста касания не дает желаемого результата.

Вам необходимо реализовать методы UIResponder touchesBegan и touchesEnded.

Вы также можете захотеть увидеть UITapGestureRecognizer - заставить его работать при касании, а не при касании? .

0 голосов
/ 29 апреля 2019

Проблема решена с помощью пользовательского жеста.

Файл: -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");
    }
}
...