【问题标题】:onStartShouldSetPanResponder vs onMoveShouldSetPanResponder in React NativeReact Native 中的 onStartShouldSetPanResponder 与 onMoveShouldSetPanResponder
【发布时间】:2019-03-17 20:26:21
【问题描述】:

我正在使用 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 是从触摸开始的总累积距离,还是与当前拖动手势的单个增量相对应的小增量? IE。如果我在x 方向上拖动Animated.View 总共100px,将dx 通过100px 还是类似于1px 的当前拖动手势增量?

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

谢谢!

【问题讨论】:

    标签: javascript react-native gesture gesture-recognition


    【解决方案1】:
    1. 不,它只会成为响应者一次。通常你只需要其中一个。例如,如果您只想让手势在拖动时变为活动状态,则 onStartShouldSetPanResponder 将返回 no。

    2. onPanResponderGrant() 对于给定的手势只会被调用一次。这通常是您可以更新状态或 UI 以通知用户手势处于活动状态的地方。

    3. dxdy 确实是相对于手势开始的累积 x 和 y 位置。因此,在您的示例中,它将是 100。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 2018-10-19
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 2019-11-06
      相关资源
      最近更新 更多