javascript - React Native 中的 onStartShouldSetPanResponder 与 onMoveShouldSetPanResponder

标签 javascript react-native gesture gesture-recognition

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

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

3) 在onPanResponderMove , 是 dxdy从触摸开始的总累积距离,还是与当前拖动手势的单个增量相对应的小增量? IE。如果我拖了 Animated.View100pxx方向,会dx通过 100px还是类似于 1px对于拖动手势的当前增量?

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

谢谢!

最佳答案

  1. 不会,它只会成为响应者一次。通常你只需要其中之一。例如,如果您只希望手势在拖动时变为事件状态,您将从 onStartShouldSetPanResponder 返回 no。

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

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

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

相关文章:

react-native - 类型错误 : Cannot read property 'length' of undefined in react-native

android - 来自电子邮件的帐户工具包深层链接登录链接无法打开我的应用程序

macos - 如果内容 View 具有点击手势操作,SwiftUI ForEach 的 onMove() 修饰符将停止工作

javascript - AJAX 上传完成后重新加载页面

javascript - ExtJS 以平铺方式打开新窗口

javascript - 如何使用 webpack 2 正确打包 loadCSS 和 cssrelpreload?

javascript - D3 map 数据标签未正确显示

javascript - 在组件内使用 ScrollView react native 滚动屏幕

Android 聚焦canvas.scale 操作后难以放置点

objective-c - 在 Mac OS X 应用程序中检测多点触控手势或鼠标拖动