У меня есть обработчик PanGesture, который вложен в ScrollView, поэтому он должен обрабатывать только жесты с двумя пальцами, но пусть родитель обрабатывает все остальные жесты.
Из чтения документов, onStartShouldSetPanResponder
будет правильным местом для определения, следует ли обрабатывать жест, но, к сожалению, gestureState.numberActiveTouches
всегда 1
, поэтому я не могу сказать, будет ли пользователь gestureState.numberActiveTouches
, зажимать или прокручивать.
Кроме того, это не так, как этот метод будет вызываться два раза с небольшой задержкой, если я коснусь экрана двумя пальцами и начну зажиматься, поэтому я действительно не знаю, как обнаружить этот случай.
Любой совет?
редактировать
View.onTouchStart
будет стрелять дважды подряд двумя пальцами, поэтому я могу легко обнаружить предстоящий жест щепотки и установить флаг для PanResponder. Однако ответчик onStartShouldSetPanResponder
всегда срабатывает, прежде чем я получу эти два события, объявляю ли я onTouchStart
на вложенном представлении, родительском представлении или представлении, которое принадлежит ParentResponder, поэтому я слишком поздно здесь.
Насколько я знаю, onStartShouldSetPanResponder
должен возвращать только true или false. Таким образом, с
...
onStartShouldSetPanResponder: () => true
...
вы говорите ответчику о том, чтобы обрабатывать штрихи и
...
onMoveShouldSetPanResponder: () => true
...
для обработки движений и перетаскивания жестов. Затем вы можете использовать
...
onPanResponderGrant: (event, gesture) => {
}
onPanResponderStart: (event, gesture) => {
let activeTouches = gesture.numberActiveTouches;
}
...
чтобы получить ваши активные штрихи. Если у вас возникли проблемы с получением правильного ответчика для обработки ввода во вложенной ситуации, попробуйте взглянуть на onStartShouldSetPanResponderCapture
внизу документации системы onStartShouldSetPanResponderCapture
responder (https://facebook.github.io/react-native/docs/gesture-responder -system.html)