Когда события пальцев отправляются как жесты в UIGestureRecognizer по сравнению с touchesBegan/touchesMoved/touchesEnded в UIView

Я пришел из macOS/Cocoa & Mouse Events, и я пытаюсь разобраться в этих событиях «Finger» (мое собственное название)


Мой вопрос:

Когда событие "Finger" происходит на UIView (назовем MyView), когда оно отправляется как Gesture на UIGestureRecognizer на MyView, и когда оно отправляется как touchesBegan/touchesMoved/touchesEnded на MyView


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

touchesBegan, touchesEnded, touchesMoved для перемещения UIView

UIGestureRecognizers vs touchesBegan/touchesMoved/touchesEnded (точность)

Сейчас мне кажется, что разница между touchBegan/touchMoved/touchEnded и распознавателем жестов зависит от скорости движения пальца?

Поэтому, если вы нажмете и медленно переместитесь, базовый UIView получит события touchMoved. Если вы быстро нажмете и перетащите, жест будет создан и передан в GestureRecognizer базового UIView.

Мое текущее предположение состоит в том, что когда палец касается земли, цикл обработки событий обнаруживает этот палец и запускает touchesBegan. Когда вы перемещаете палец, он запускает touchesMoved.
Однако, если вы двигаетесь достаточно быстро или таким образом, что среда выполнения считает, что вы делаете жест, вместо этого создается жест и отправляется сообщение на UIGestureRecognizer вместо отправки touchesMoved

В настоящее время я пытаюсь проверить эту гипотезу, но это довольно утомительно, и у меня нет действительно хорошего примера проекта для проверки, поэтому я решил, что если возможно, поищу краудсорсинг. отпишусь, если сам разберусь


person A O    schedule 27.04.2019    source источник


Ответы (1)


Это сложно (или может быть), но основное правило простое. [Дополнительные сведения см. в моей книге.]

Палец — это UITouch, который обернут в UIEvent для доставки. Доставка продолжается, касания начались, касания сдвинулись, касания сдвинулись... касания закончились/отменились, и в этот момент этого пальца больше нет.

При появлении касания (пальца) начальное событие UITouch / UIEvent (начало касаний) отправляется как в представление, и в его распознаватель(и) жестов и em> любые распознаватели жестов выше по иерархии представлений. Таким образом, прикосновения доставляются в представление как обычно, и в то же время распознаватели жестов могут думать о жесте.

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

person matt    schedule 27.04.2019
comment
Спасибо за ответ! Вы приходили на мои вопросы в течение многих лет, и я всегда ценю это. Некоторое продолжение, что такое g.r.s и g.r.? Я также прочитал этот отрывок в вашей книге, и теперь мне интересно, что произойдет, если: самый передний вид не отвечает на touches..., поэтому он передает событие вверх по цепочке респондентов-- Однако это событие в конечном итоге создает Жест как Что ж. Будет ли жест по-прежнему отправлен на самый передний вид? или он также будет двигаться вверх по цепочке, так же, как событие касания? - person A O; 27.04.2019
comment
g.r распознаватель жестов - person matt; 27.04.2019
comment
Ну, если вы посмотрите на мою книгу, вы увидите ответ: сначала мы определяем представление проверки попадания. - person matt; 27.04.2019