Подтвердить что ты не робот

React Native - onTouchStart vs PanResponder для нескольких нажатий в секунду

Я разрабатываю приложение с React Native, которое должно реагировать на жесты нажатия как можно скорее, потому что через секунду может быть запущено более одного события крана. Нет необходимости в двойном нажатии или перемещении жестов, но нужно позаботиться о одновременных кранах. Я тестировал как onTouchStart, так и PanResponder | onPanResponderGrant и видел, что:

  • onTouchStart запускается дважды, когда два крана одновременно, а onPanResponderGrant вызывается только один раз.
  • onPanResponderMove запускается, даже если у меня есть onMoveShouldSetPanResponder до false, и он запускается много раз, когда два крана одновременно, или когда есть несколько отводов за секунду.
  • Когда несколько отводов выполняются за секунду, onTouchStart работает нормально, но onPanResponderGrant запускается меньше времени.

Исходя из вышеприведенных причин, я думаю, что лучше использовать onTouchStart.

Теперь возникает вопрос: Должен ли я использовать onTouchStart, даже если React Native docs предлагает использовать PanResponder для multi -touch жесты?

PanResponder примиряет несколько штрихов в одном жесте. Он делает жесты с одним касанием упругими к дополнительным касаниям и может использоваться для распознавания простых жестов с несколькими касаниями.

Или мне что-то не хватает PanResponder?

Edit:

Кроме того, gestureState.numberActiveTouches всегда 1, событие, когда два крана одновременно. Я думал, что это может сделать трюк.

4b9b3361

Ответ 1

Из определения PanResponder я понимаю, что он использовал для интерпретации жестов с несколькими касаниями и выполнения 1 действия. Как я коснулся двумя пальцами на изображении, и я мог получить изображение, скопированное в буфер обмена.

Пока кажется, что вам нужно другое поведение: я нажимаю 2 пальца на 1 барабанную тарелку, вы хотите получить 2 звука. Как будто вы разделили барабанные цимбалы на бесконечность кнопок, и что бы вы ни делали, для каждого нажатия вы получите один отдельный звук.

Тогда вы не хотите использовать PanResponder, потому что он попытается интерпретировать кучу движений в один звук, в то время как вы хотите, чтобы каждое движение создавало отдельный звук. И onTouchStart просто выполняет свою работу. Поэтому вы, вероятно, поступаете правильно!