ReSt Native中的onStartShouldSetPanResponder vs onMoveShouldSetPanResponder

问题描述 投票:0回答:1

我正在使用React Native中的PanResponder,并且正在考虑我点击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)如果我点击PanResponder附加的Animated.View,我知道onStartShouldSetPanResponder: () => true导致Animated.View成为这个手势的响应者,但是onMoveShouldSetPanResponder: () => true导致它在每个后续的拖动手势增量上“重新成为”响应者?

2)onPanResponderGrant()只有在我第一次点击Animated.View时才被调用,或者它是否也会在拖动手势的每个后续增量中被调用?

3)在onPanResponderMove中,dxdy是从触摸开始的总累积距离,还是对应于当前拖动手势的个别增量的小增量?即。如果我在Animated.View方向拖动100px总共xdx100px或者是否会像当前增加的阻力姿势那样1px

如果你能给我一些关于其中任何一个的见解,那就太棒了。

谢谢!

javascript react-native gesture gesture-recognition
1个回答
1
投票
  1. 不,它只会成为响应者一次。通常你只需要其中一个。例如,如果您只想在拖动时激活手势,则会从onStartShouldSetPanResponder返回no。
  2. 对于给定的手势,onPanResponderGrant()只会被调用一次。这通常是您可以更新状态或UI以通知用户手势处于活动状态的位置。
  3. dxdy确实累积了相对于手势开始的x和y位置。所以在你的例子中它将是100。
© www.soinside.com 2019 - 2024. All rights reserved.