Когда события «пальца» отправляются в виде жестов в UIGestureRecognizer vs touchesBegan / touchesMoved / touchesEnded в UIView - PullRequest
0 голосов
/ 27 апреля 2019

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


Мой вопрос:

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


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

касания начались, касания закруглены, касания перемещены для перемещения UIView

UIGestureRecognizer vs touchsBegan / touchsMoved / touchsEnded (точность)

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

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

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

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

1 Ответ

1 голос
/ 27 апреля 2019

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

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

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

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

...