Два UILongPressGestureRecognizer, один может выстрелить, другой не может - PullRequest
6 голосов
/ 15 марта 2012

ребята,

Я добавил два UILongPressGestureRecognizer.То, что я хочу, это когда две кнопки нажаты в течение 0,3 секунды, запустить «shortPressHandler».Если пользователь продолжает нажимать эти две кнопки в течение еще 1,2 секунды, запустите «longPressHandler».Теперь у меня срабатывает только shortPressHandler, а longPressHandler никогда не запускается.Я думаю, что это возможно, потому что shortPressGesture распознается первым, а longPressGesture никогда не получает шанса.Может кто-нибудь показать мне, как добиться того, чего я хочу?Заранее спасибо.

UILongPressGestureRecognizer *longPressGesture =[[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressHandler:)] autorelease];
longPressGesture.numberOfTouchesRequired = 2;
longPressGesture.minimumPressDuration = 1.5;
longPressGesture.allowableMovement = 10;
longPressGesture.cancelsTouchesInView = NO;
longPressGesture.enabled = true;
[self.view addGestureRecognizer:longPressGesture];

UILongPressGestureRecognizer *shortPressGesture =[[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(shortPressHandler:)] autorelease];
shortPressGesture.numberOfTouchesRequired = 2;
shortPressGesture.minimumPressDuration = 0.3;
shortPressGesture.allowableMovement = 10;
shortPressGesture.cancelsTouchesInView = NO;
shortPressGesture.enabled = true;
[self.view addGestureRecognizer:shortPressGesture];

1 Ответ

6 голосов
/ 15 марта 2012

Вставьте эту строку перед добавлением shortPressGesture:

 [shortPressGesture requireGestureRecognizerToFail:longPressGesture];

Примечание: shortGesture будет вызываться не сразу после 0,3 секунды удержания, а после отпускания крана, если он длился от 0,3 до 1,2 секунд. Если время нажатия превышает 1,2 с (в вашем коде 1,5 с, что, вероятно, является опечаткой), будет запущен только longPressGesture.

EDIT:

Однако, если вы хотите, чтобы ваши обработчики событий сработали (в случае длительного нажатия), вы должны сделать это:

Ваш UIView из должен реализовать файл <UIGestureRecognizerDelegate> в .h.

В .m файле вы добавляете этот метод:

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

    return YES;
}

Теперь вместо добавления строки:

[shortPressGesture requireGestureRecognizerToFail:longPressGesture];

Вы добавляете эти две строки:

shortPressGesture.delegate = self;
longPressGesture.delegate = self;

ПРИМЕЧАНИЕ: если у вас есть какие-либо другие UIGestureRecognisers, связанные с вашим UIVIew, вам нужно будет добавить некоторую проверку в shouldRecognizeSimultaneouslyWithGestureRecognizer:, в противном случае вы можете просто вернуть YES.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...