2013-11-21 2 views
2

у меня есть два распознавателей для моего зрения контроллера:UISwipeGestureRecognizer не регистрации салфетки при использовании UITapGestureRecognizer

(viewDidLoad)

//Add gestures 
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:nil]; 
    [tap setDelaysTouchesBegan:YES]; 
    tap.delegate = self; 
    [self.view addGestureRecognizer:tap]; 

    UISwipeGestureRecognizer *leftSwipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:nil]; 

    leftSwipe.delegate = self; 

    [self.view addGestureRecognizer:leftSwipe]; 

На кране я хочу что-то случится, на взмах я хочу сделать что-то еще , Однако кран всегда вызывает как жест салфетки, так и жест нажатия.

Как я могу сделать так, чтобы он вызывал либо в зависимости от действия?

Вот код, где я пытаюсь разглядеть (но не)

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ 


    if ([gestureRecognizer isKindOfClass:[UISwipeGestureRecognizer class]]) { 

     UISwipeGestureRecognizer *rg = (UISwipeGestureRecognizer*)gestureRecognizer; 
     if (rg.direction == UISwipeGestureRecognizerDirectionRight && !self.itemsOnScreen) { 
      NSLog(@"swipe"); 
      return YES; 
     }else{ 
      return NO; 

     } 

    } 

    if (self.itemsOnScreen) { 

     self.itemsOnScreen = NO; 

     //Actions for my tap 

     return YES; 

    }else{ 
     return NO; 
    } 
} 

ответ

3

Вы можете сделать другой метод для отвода и салфетки и установить в качестве действий для каждого,

Вы можете сделать что-то например,

-(void)viewDidLoad 
{ 
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)]; 
    [tap setDelaysTouchesBegan:YES]; 
    [self.view addGestureRecognizer:tap]; 

    UISwipeGestureRecognizer *leftSwipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipe:)]; 

    [self.view addGestureRecognizer:leftSwipe]; 

} 
- (IBAction)tap:(id)sender 
{ 

    NSLog(@"taptap"); 
} 
- (IBAction)swipe:(id)sender 
{ 

    NSLog(@"swipe"); 
} 

Я испытал это, работает для меня.

1

Рекомендация

Вы можете реализовать следующий Жест метод распознаватель делегата в дополнение к рекомендации отмеченное другим:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 

и, возможно, ...

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 

Вот ссылка на Apple Documentation на эту тему.

0

Существует метод Колбек на UIGestureRec ...

// called when the recognition of one of gestureRecognizer or otherGestureRecognizer would be blocked by the other 
// return YES to allow both to recognize simultaneously. the default implementation returns NO (by default no two gestures can be recognized simultaneously) 
// 
// note: returning YES is guaranteed to allow simultaneous recognition. returning NO is not guaranteed to prevent simultaneous recognition, as the other gesture's delegate may return YES 
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer; 

Это должно решить ваши проблемы

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