onStartShouldSetPanResponder против onMoveShouldSetPanResponder в React Native - PullRequest
0 голосов
/ 17 марта 2019

Я работаю с PanResponder в React Native и рассматриваю сценарий, в котором я щелкаю Animated.View и перетаскиваю его. У меня есть следующий код:

this.panResponder = PanResponder.create({
  onStartShouldSetPanResponder: () => true,
  onMoveShouldSetPanResponder: () => true,
  onPanResponderGrant: () => {
    this.animatedValue.setOffset({
      x: this._value.x,
      y: this._value.y,
    })
    this.animatedValue.setValue({ x: 0, y: 0})
  },
  onPanResponderMove: Animated.event([
    null,
    {
      dx: this.animatedValue.x,
      dy: this.animatedValue.y
    }
  ])
})

Мои вопросы:

1) Если я нажму Animated.View, к которому прикреплен PanResponder, я знаю, что onStartShouldSetPanResponder: () => true заставляет Animated.View стать ответчиком на этот жест, но onMoveShouldSetPanResponder: () => true вызывает его повторное превращение ответчик на каждый последующий шаг жеста перетаскивания?

2) onPanResponderGrant() вызывается только при первом нажатии Animated.View, или он также вызывается при каждом последующем увеличении жеста перетаскивания?

3) В onPanResponderMove являются dx и dy суммарными накопленными расстояниями от начала касания или они представляют собой небольшие приращения, соответствующие индивидуальному приращению текущего жеста перетаскивания? то есть. Если бы я перетащил Animated.View в общей сложности 100px в направлении x, то dx был бы 100px или это было бы что-то вроде 1px для текущего приращения жеста перетаскивания?

Если бы вы могли дать мне некоторое представление о ЛЮБОМ из них, это было бы здорово.

Спасибо!

1 Ответ

1 голос
/ 18 марта 2019
  1. Нет, он станет ответчиком только один раз. Обычно вам нужен только один из них. Например, если вы хотите, чтобы жест стал активным только при перетаскивании, вы должны вернуть no из onStartShouldSetPanResponder.

  2. onPanResponderGrant () будет вызываться только один раз для данного жеста. Обычно в этом месте можно обновить состояние или пользовательский интерфейс, чтобы уведомить пользователя об активном жесте.

  3. dx и dy действительно представляют собой x и y позиции относительно начала жеста. Так что в вашем примере это будет 100.

...