1

Можно панорамировать вверх, вниз, влево и вправо.2 различных UIPanGestureRecognizers с разными направлениями одновременно?

Распознаватель 1 обрабатывает только вертикальные кастрюли, распознаватель 2 обрабатывает только горизонтальные кастрюли. Оба они связаны с одним и тем же объектом делегата.

Распознаватель 2 полностью независим от первого (за исключением одного направления из описанных 4 вариантов).

Как предотвратить одновременное выполнение одного из них с другим?

+1

Какой жест распознавателей являются распознавателем 1 или 2 в настоящее время? –

+0

Являются ли они UISwipeGestureRecognizers или UIPanGestureRecognizers? (Ваше название и вопрос, похоже, конфликтуют в этом отношении.) –

+0

распознаватель жестикуляции и другой распознающий жест. Внимательно прочитайте вопрос. Часть, отмеченная знаком «P.S.» добавление только. Вам не нужно читать его, если он вас смущает –

ответ

1
-(void)initPanGestures{ 
UIPanGestureRecognizer *panGestureRecognizer1 = [[UIPanGestureRecognizer alloc] initWithTarget:self 
                   action:@selector(handlePan1Gesture:)]; 

UIPanGestureRecognizer *panGestureRecognizer2 = [[UIPanGestureRecognizer alloc] initWithTarget:self 
                         action:@selector(handlePan2Gesture:)] 
} 

-(void)handlePan1Gesture:(UIPanGestureRecognizer *)sender{ 
CGPoint velocity = [sender velocityInView:sender.view]; 

switch(sender.state) { 

     case UIGestureRecognizerStateBegan: 
     if(fabs(velocity.y) > fabs(velocity.x)){ 
      panGestureRecognizer2.enabled=YES; 
      panGestureRecognizer1.enabled=NO; 
     } 
     break; 
     case UIGestureRecognizerStateCancelled: 
     panGestureRecognizer1.enabled=YES; 
     break; 
    case UIGestureRecognizerStateEnded:{ 
     panGestureRecognizer1.enabled=YES; 
    } 

     break; 
} 

if(velocity.x > 0) 
{ 
    NSLog(@"gesture went right"); 
} 
else if(velocity.x < 0) 
{ 
    NSLog(@"gesture went left"); 
} 


} 

-(void)handlePan2Gesture:(UIPanGestureRecognizer *)sender{ 
CGPoint velocity = [sender velocityInView:sender.view]; 
switch(sender.state) { 

    case UIGestureRecognizerStateBegan: 
     if(fabs(velocity.x) > fabs(velocity.y)){ 
      panGestureRecognizer2.enabled=NO; 
      panGestureRecognizer1.enabled=YES; 

     } 
     break; 

    case UIGestureRecognizerStateCancelled: 
     panGestureRecognizer2.enabled=YES; 
     break; 
    case UIGestureRecognizerStateEnded: 
     panGestureRecognizer2.enabled=YES; 
     break; 

} 


if(velocity.y > 0) 
{ 
    NSLog(@"gesture went down"); 
} 
else if(velocity.y < 0) 
{ 
    NSLog(@"gesture went up"); 
} 

} 

Также для двух различий Жеста вы должны реализовать методы делегата и признать пример gestures.Fro я использовал два жеста одновременно длинные и жест панорамирования

#pragma mark - UIGestureRecognizerDelegate methods 
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { 

return YES; 
} 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
if ([panGestureRecognizer1 isEqual:gestureRecognizer]) { 

    return [panGestureRecognizer2 isEqual:otherGestureRecognizer]; 
} 

if ([panGestureRecognizer2 isEqual:gestureRecognizer]) { 

    return [panGestureRecognizer1 isEqual:otherGestureRecognizer]; 
} 

return NO; 
} 
+0

Не совсем верно, так как это не мешает одновременному выполнению жеста. –

+0

см. В ответе на редактирование. Это будет служить вашей цели. – Mukesh

+0

. 'ShouldRecognizeSimultaneousWithGestureRecognizer: часть вашего ответа - это единственная часть, относящаяся к этому конкретному вопросу ... (т.е. Что такое' self.selectedItemIndexPath? ') –

Смежные вопросы