У меня есть 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
, хотя кажется, что эта переменная напрямую зависит от последовательности касаний, а последовательность касаний обрабатывается этими методами.