обнаружение пальца вверх / вниз UITapGestureRecognizer - PullRequest
11 голосов
/ 06 декабря 2011

Как я могу узнать, когда палец опущен и когда он поднялся с UITapGestureRecognizer?
документация говорит, что я должен обрабатывать только UIGestureRecognizerStateEnded как нажатие, так что это означает, что UIGestureRecognizerStateBegin, когда палец опущен, но все, что я получаю, это UIGestureRecognizerStateEnded.
Код, который я использую для регистрации распознавателя:

[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]

Ответы [ 2 ]

19 голосов
/ 06 декабря 2011

UITapGestureRecognizer - это распознаватель дискретных жестов, поэтому он никогда не переходит в начальное или измененное состояние. Из ссылки на класс UIGestureRecognizer:

Переход дискретных жестов из Возможного в Распознанный. (UIGestureRecognizerStateRecognized) или Ошибка (UIGestureRecognizerStateFailed), в зависимости от того, успешно интерпретировать жест или нет. Если распознаватель жестов при переходе в Распознанное, оно отправляет сообщение о действии своей цели.

(Помня, конечно, что UIGestureRecognizerStateRecognized == UIGestureRecognizerStateEnded).

В документах говорится, что вы должны проверить состояние распознавателя жестов касания, чтобы убедиться, что он находится в завершенном состоянии, прежде чем запускать код, чтобы сказать, что он был распознан. Они не говорят, что жест касания фактически переходит в начальное или измененное состояние (хотя я допускаю, что документы немного вводят в заблуждение в используемом языке!).

Если вы хотите проверить наличие события нажатия пальцем для распознавателя жестов касания, я бы порекомендовал просто использовать touchesBegan:withEvent:, поскольку это то, что вам действительно нужно в любом случае.

3 голосов
/ 13 января 2016

Вы можете переопределить метод делегата -(BOOL)gestureRecognizer:shouldReceiveTouch:.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    NSLog(@"Hello from press down");

    return YES;
}
...