React native 在React Native中,是否可以检测到刷卡与触控式应答器';s onStartShouldSetPanResponder?
现在,我在我的React native 在React Native中,是否可以检测到刷卡与触控式应答器';s onStartShouldSetPanResponder?,react-native,React Native,现在,我在我的onStartShouldSetPanResponder中返回一个true,因此PanResponder想要处理点击和平移。有没有办法将其限制为仅平移,因为我需要一个TouchableHighlight来处理这个问题?(我知道手势应答器应该同时处理这两个问题,但“平移”应答器处理点击似乎很奇怪) 由于手势刚刚开始,因此开始时应设置PanResponder中的dx/dy为0。是否有任何方法可以检测它是否是点击的开始并返回false(如果是) 或者我应该在OnPanResponderR
onStartShouldSetPanResponder
中返回一个true
,因此PanResponder想要处理点击和平移。有没有办法将其限制为仅平移,因为我需要一个TouchableHighlight
来处理这个问题?(我知道手势应答器应该同时处理这两个问题,但“平移”应答器处理点击似乎很奇怪)
由于手势刚刚开始,因此开始时应设置PanResponder中的dx
/dy
为0。是否有任何方法可以检测它是否是点击的开始并返回false(如果是)
或者我应该在
OnPanResponderRelease
中检测它是点击还是平移?panResponder有两个事件:
- onStartShouldSetPanResponder(捕获)
- onMoveShouldSetPanResponder(捕获)
我只能通过删除onStartShouldSetPanResponderCapture来解决这个问题 我可以通过onMoveShouldSetPanResponder方法实现这一点,如下所示:
onMoveShouldSetPanResponder: (evt, gestureState) => {
return Math.abs(gestureState.dx) >= 1 || Math.abs(gestureState.dy) >= 1
}
如果x或y移动大于1,则返回true。为了检测点击,我必须用一个可触摸的元素来包装视图中包含乞丐的所有内容。下面是一个完整的工作示例:
class CircleTapExample extends Component {
constructor(props) {
super(props)
this.position = new Animated.ValueXY({ x: 0, y: 0 });
this.panResponder = PanResponder.create({
onMoveShouldSetPanResponder: (evt, gestureState) => { return Math.abs(gestureState.dx) >= 1 || Math.abs(gestureState.dy) >= 1 },//true,
onPanResponderMove: (evt, gestureState) => {
console.log("I was moved")
this.position.setValue({ x: gestureState.moveX, y: gestureState.moveY })
},
});
}
circleTapped() {
// Do something here when tapped
console.log("I was tapped")
}
render() {
return (
<Animated.View style={[styles.container, { ...this.position.getLayout() }]} {...this.panResponder.panHandlers}>
<TouchableOpacity onPress={() => this.circleTapped()} style={{ flex: 1 }}>
<View style={styles.circle} />
</TouchableOpacity>
</Animated.View>
)
}
}
const styles = {
container: {
width: 75,
height: 75,
bottom: 5,
left: 5,
position: 'absolute'
},
circle: {
width: 75,
height: 75,
borderRadius: 40,
backgroundColor: 'red'
}
}
class CircleTapExample扩展组件{
建造师(道具){
超级(道具)
this.position=new Animated.ValueXY({x:0,y:0});
this.panResponder=panResponder.create({
onMoveShouldSetPanResponder:(evt,gestureState)=>{return Math.abs(gestureState.dx)>=1 | | Math.abs(gestureState.dy)>=1},//true,
onPanResponderMove:(evt,手势状态)=>{
log(“我被感动了”)
this.position.setValue({x:gestureState.moveX,y:gestureState.moveY})
},
});
}
圆圈(){
//点击时在这里做些什么
日志(“我被点击”)
}
render(){
返回(
this.circleTapped()}style={{flex:1}}>
)
}
}
常量样式={
容器:{
宽度:75,
身高:75,
底部:5,
左:5,,
位置:'绝对'
},
圆圈:{
宽度:75,
身高:75,
边界半径:40,
背景颜色:“红色”
}
}