我知道如何创建一个panResponder,但我不知道如何创建它的多个示例。例如,我有一个独立移动的元素数组,我必须将每个responder分别附加到元素,以获得布局值。任何帮助将被卡住很长一段时间。
pan = new Animated.ValueXY();
panResponder = PanResponder.create({
onMoveShouldSetPanResponder: () => true,
onPanResponderGrant: (evt, gestureState) => {
this.pan.setOffset(this.pan.__getValue());
this.pan.setValue({ x: 0, y: 0 });
},
onPanResponderMove: Animated.event([
null,
{ dx: this.pan.x, dy: this.pan.y }
]),
onPanResponderRelease: (e) => {
console.log(this.pan.getLayout(), 'layout values')
this.pan.flattenOffset();
}
});
render() {
return (
<View style={styles.container}>
<View style={{backgroundColor:'red', height:300, width:300}}>
<Animated.View
pointerEvents="box-none"
style={[styles.box, {
transform: [{ translateX: this.pan.x }, { translateY: this.pan.y }]
}]}
{...this.panResponder.panHandlers}>
</Animated.View>
</View>
</View>
);
}
2条答案
按热度按时间x9ybnkn61#
1.您可以根据数组创建多个引用父组件本身的示例,并将
PanResponder
附加到它1.您可以创建一个子组件并将PanResponder附加到它的ref。
c3frrgcw2#
我在
onPanResponderMove()
中添加了一些变通方法来支持多点触控,请参阅https://github.com/flyskywhy/react-native-gcanvas/blob/master/components/GCanvasComponent.js#L42,下面是react-native-babylonjs多点触控演示的结果: