我正在使用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方向上总共拖动了100pxx,对于当前拖动手势增量,是dx一个100px还是一个类似于1px的东西?

如果您能给我一些关于这些方面的见解,那将是很棒的。

谢谢!

最佳答案

不,它只会成为响应者一次。通常,您只需要其中之一。例如,如果仅希望手势在拖动时变为活动状态,则将从onStartShouldSetPanResponder中返回否。
对于给定的手势,onPanResponderGrant()将仅被调用一次。通常,您可以在这里更新状态或UI,以通知用户手势处于活动状态。
dxdy实际上是相对于手势开始的x和y累积位置。因此在您的示例中为100。

关于javascript - React Native中的onStartShouldSetPanResponder与onMoveShouldSetPanResponder,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55211567/

10-13 04:00