Это возможно и просто! Это означает, что вы должны быть делегатом вашего распознавателя жестов. Кажется, что-то, что никто не знает, существует. В моем подклассе контроллера представления я объявил и соответствие протоколу <UIGestureRecognizerDelegate>
и два ivars:
UIPinchGestureRecognizer *myPinchGR;
UIPanGestureRecognizer *myPanGR;
Эти ивары создаются с учетом загрузки. Обратите внимание на настройку self в качестве делегата.
-(void)viewDidLoad{
[super viewDidLoad];
myPanGR = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panTarget:)];
myPanGR.delegate = self;
[self.view addGestureRecognizer:myPanGR];
myPinchGR = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchTarget:)];
myPinchGR.delegate = self;
[self.view addGestureRecognizer:myPinchGR];
}
Один из вызовов делегата, сделанный UIGestureRecognizer
, является shouldRecognizeSimultaneouslyWithGestureRecognizer:
, если бы у меня было более двух распознавателей жестов, тогда эта функция должна была бы содержать некоторую логику. Но так как есть только два, я могу просто вернуть YES
.
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
Теперь вам нужно включить немного (очень мало) дополнительной логики в свои методы действий для проверки на соответствующие условия.
-(void)panTarget:(UIPanGestureRecognizer *)panGR{
if (panGR.numberOfTouches > 1) return;
NSLog(@"panny");
}
-(void)pinchTarget:(UIPinchGestureRecognizer *)pinchGR{
if (pinchGR.numberOfTouches < 2) return;
NSLog(@"pinchy");
}
Запустите этот код, посмотрите журналы. вы будете видеть, когда вы будете двигать одним пальцем, вы увидите «панни», когда вы положите второй палец вниз, вы увидите «щепотку», и вперед и назад.