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





Жест касания имеет только одно состояние — «завершено». Вы не можете определить, когда начинается касание, используя жест касания. Как вы видели, попытка использовать два жеста касания не приводит к желаемому результату.
Вам нужно реализовать методы UIRespondertouchesBegan и touchesEnded.
Вы также можете увидеть UITapGestureRecognizer - заставить его работать при касании, а не при касании? .
О верно. Жест касания имеет только одно состояние. Это жест касания только в том случае, если в конце он был распознан как фактическое касание. Вы не можете получить состояние «начало» для жеста касания. Если вы хотите знать, когда пользователь касается экрана и когда он перестает касаться экрана, рассмотрите возможность переопределения методов touchesBegan и touchesEnded из UIResponder.
Проблема решена путем реализации пользовательского жеста.
Файл:-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
How to Use:-
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");
}
}
Каждый раз, распознавая нажмитеКонецЖест. tapStartGesture не является вызовом