2016-11-06 13 views
0

Я сделал жест, как это:Почему gestureRecognizerShouldBegin вызывается несколько раз?

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]  
initWithTarget:self action:@selector(tapOnPhoto:)]; 
tapGesture.numberOfTapsRequired = 1; 
tapGesture.numberOfTouchesRequired = 1;            
tapGesture.delegate = self; 
[self.htmlWebView addGestureRecognizer:tapGesture]; 

И когда кран на htmlWebView вызова gestureRecognizerShouldBegin в течение нескольких раз.

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ 
    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]){ 
     [self performSelector:@selector(tapOnPhoto:) withObject:gestureRecognizer]; 

    } 
    return YES; 
} 

Почему gestureRecognizerShouldBegin называется более одного раза за жест?

+0

попробуйте следующее: tapGesture.delaysTouchesBegan = YES; – kaushal

ответ

0

Согласно gestureRecognizerShouldBegin описание.

Этот метод вызывается, когда жест распознаватель пытается перейти из UIGestureRecognizerStatePossible состояния. Возврат NO вызывает распознаватель жестов для перехода к состоянию UIGestureRecognizerStateFailed.

Этот метод будет вызван несколько раз, чтобы получить переходное состояние жестов.

Также, как вы добавили селектор для TapGesture, почему вы вызываете этот метод явно, метод получит сам вызов.

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ 
    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]){ 
     [self performSelector:@selector(tapOnPhoto:) withObject:gestureRecognizer]; 

    } 
    return YES; 
} 

Эта функция не потребуется, и вы можете удалить ее, когда вы вызываете только метод.

0

Как объяснил @Rajat в своем ответе, вы можете удалить метод делегата и вместо этого использовать свой метод tapOnPhoto: для анализа вашей логики жестов.

UIGestureRecognizer объект, который вы получите в качестве аргумента в этом методе имеет свойство state

Какие могут иметь следующие значения:

UIGestureRecognizerStatePossible 
UIGestureRecognizerStateBegan 
UIGestureRecognizerStateChanged 
UIGestureRecognizerStateEnded 
UIGestureRecognizerStateCancelled 
UIGestureRecognizerStateFailed 
UIGestureRecognizerStateRecognized 

Вы можете использовать switch и обеспечивают специфическую логику для каждого случая.