Есть ли гарантия, что `UILongPressGestureRecognizer` всегда будет выполнять свое` touchesMoved (_: with:) `в состоянии` .began` только один раз? - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть UILongPressGestureRecognizer (GR) на виде. GR перенаправляет касания и события, которые он получает в своем методе обработки событий касания, в другое представление (forwardee). Поскольку это долгое нажатие, состояние .began не устанавливается до тех пор, пока не будет вызван метод GR's``touchesBegan(_:with:) (после первого касания требуется время, чтобы подтвердить, что это действительно длинное нажатие).

Я хочу позвонить touchesBegan(_:with:) на forwardee, когда долгое нажатие будет распознано. Проблема в том, что я не могу сделать это в self.state наблюдателе, так как метод касания требует касаний и события, и они недоступны из базового класса, и Apple явно заявляет, что не следует сохранять эти данные вне контекста касания. методы, которым они даны.

Однако я заметил, что touchesMoved(_:with:) вызывается в состоянии .began хотя бы один раз; как до, так и после super.touchesMoved(_:with:) вызывается. Могу ли я зависеть от этого поведения и просто сделать

if self.state == .began { forwardee.touchesBegan(touches, with: event) }

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

Кроме того, важно, идет ли этот код до или после вызова super? Я заметил, что self.state даже не изменяется в вызове super, хотя кажется, что эта переменная напрямую зависит от последовательности касаний, а последовательность касаний обрабатывается этими методами.

...