我正在使用 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
, 是 dx
和 dy
从触摸开始的总累积距离,还是与当前拖动手势的单个增量相对应的小增量? IE。如果我拖了 Animated.View
共100px
在x
方向,会dx
通过 100px
还是类似于 1px
对于拖动手势的当前增量?
如果您能给我一些关于其中任何一个的见解,那就太好了。
谢谢!
最佳答案
不会,它只会成为响应者一次。通常你只需要其中之一。例如,如果您只希望手势在拖动时变为事件状态,您将从 onStartShouldSetPanResponder 返回 no。
onPanResponderGrant() 只会针对给定的手势调用一次。这通常是您可以更新状态或 UI 以通知用户手势处于事件状态的地方。
dx
和dy
确实是相对于手势开始的累积 x 和 y 位置。因此,在您的示例中,它将是 100。
关于javascript - React Native 中的 onStartShouldSetPanResponder 与 onMoveShouldSetPanResponder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55211567/