Я пытаюсь связать два жеста один за другим.UILongPressGestureRecognizer, затем UIPanGestureRecognizer.
Я хочу обнаружить долгое нажатие, затем разрешить распознавание жеста панорамирования.
Я создал подкласс UIPanGestureRecognizer и добавил PanEnabled Bool iVar.В кадре initWith я установил для panEnabled значение NO.
В Touches Moved я проверяю, включена ли она, и затем вызываю Super touchesMoved, если она есть.
В моем обработчике жестов LongPress я зацикливаюсь через Жесты представления, пока не найду свой подклассЖест, а затем установитеPanEnabled на ДА.
Кажется, что он работает, хотя он, как и оригинальный распознаватель жестов панорамирования, не работает должным образом и не устанавливает правильные состояния.Я знаю, что если вы создаете подкласс UIGestureRecognizer, вам нужно поддерживать это состояние самостоятельно, но я думаю, что если вы создаете подкласс UIPanGestureRecognizer и для всех методов касаний, вызывающих super, он будет устанавливать это состояние там.
Вот мой подкласс .h Файл
#import <UIKit/UIKit.h>
#import <UIKit/UIGestureRecognizerSubclass.h>
@interface IoUISEListPanGestureRecognizer : UIPanGestureRecognizer {
int IoUISEdebug;
BOOL panEnabled;
}
- (id)initWithTarget:(id)target action:(SEL)action;
@property(nonatomic, assign) int IoUISEdebug;
@property(nonatomic, assign) BOOL panEnabled;
@end
Вот подкласс .m Файл
#import "IoUISEListPanGestureRecognizer.h"
@implementation IoUISEListPanGestureRecognizer
@synthesize IoUISEdebug;
@synthesize panEnabled;
- (id)initWithTarget:(id)target action:(SEL)action {
[super initWithTarget:target action:action];
panEnabled = NO;
return self;
}
- (void)ignoreTouch:(UITouch*)touch forEvent:(UIEvent*)event {
[super ignoreTouch:touch forEvent:event];
}
-(void)reset {
[super reset];
panEnabled = NO;
}
- (BOOL)canPreventGestureRecognizer:(UIGestureRecognizer *)preventedGestureRecognizer {
return [super canPreventGestureRecognizer:preventedGestureRecognizer];
}
- (BOOL)canBePreventedByGestureRecognizer:(UIGestureRecognizer *)preventingGestureRecognizer{
return [super canBePreventedByGestureRecognizer:preventingGestureRecognizer];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
[super touchesBegan:touches withEvent:event];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
if (panEnabled) {
[super touchesMoved:touches withEvent:event];
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesEnded:touches withEvent:event];
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{
[super touchesCancelled:touches withEvent:event];
}
@end