如何计算和检测PanResponder事件?
How to calculate and detect PanResponder event?
我对动画和手势处理程序还很陌生。我正在阅读官方 React Native 动画中的文档,我发现了这段代码的片段,可以让你在蓝框周围移动。
https://reactnative.dev/docs/animations
import React, { useRef } from "react";
import { Animated, View, StyleSheet, PanResponder, Text } from "react-native";
const App = () => {
const pan = useRef(new Animated.ValueXY()).current;
const panResponder = useRef(
PanResponder.create({
onMoveShouldSetPanResponder: () => true,
onPanResponderMove: Animated.event([
null,
{ dx: pan.x, dy: pan.y }
]),
onPanResponderRelease: () => {
Animated.spring(pan, { toValue: { x: 0, y: 0 } }).start();
}
})
).current;
return (
<View style={styles.container}>
<Text style={styles.titleText}>Drag & Release this box!</Text>
<Animated.View
style={{
transform: [{ translateX: pan.x }, { translateY: pan.y }]
}}
{...panResponder.panHandlers}
>
<View style={styles.box} />
</Animated.View>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: "center",
justifyContent: "center"
},
titleText: {
fontSize: 14,
lineHeight: 24,
fontWeight: "bold"
},
box: {
height: 150,
width: 150,
backgroundColor: "blue",
borderRadius: 5
}
});
export default App;
但是,我想 console.log 或者在 panresponder 移动时做一些计算,所以我尝试修改我的 opPanResponderMove 但蓝框不再移动。我想知道为什么?
我修改的代码:
onPanResponderMove: (event, gestureState) => {
console.log(event);
console.log(gestureState);
Animated.event([
null,
{ dx: pan.x, dy: pan.y }
])
},
你的问题有问题here
据说
Reason was because Animation.event() only generates the function which is used from onPanResponderMove, it also needs the default arguments evt, gestureState
这是解决方法:
onPanResponderMove: (event, gestureState) => {
console.log(event);
console.log(gestureState);
return Animated.event([
null,
{ dx: pan.x, dy: pan.y }
])(event,gestureState);
},
我对动画和手势处理程序还很陌生。我正在阅读官方 React Native 动画中的文档,我发现了这段代码的片段,可以让你在蓝框周围移动。
https://reactnative.dev/docs/animations
import React, { useRef } from "react";
import { Animated, View, StyleSheet, PanResponder, Text } from "react-native";
const App = () => {
const pan = useRef(new Animated.ValueXY()).current;
const panResponder = useRef(
PanResponder.create({
onMoveShouldSetPanResponder: () => true,
onPanResponderMove: Animated.event([
null,
{ dx: pan.x, dy: pan.y }
]),
onPanResponderRelease: () => {
Animated.spring(pan, { toValue: { x: 0, y: 0 } }).start();
}
})
).current;
return (
<View style={styles.container}>
<Text style={styles.titleText}>Drag & Release this box!</Text>
<Animated.View
style={{
transform: [{ translateX: pan.x }, { translateY: pan.y }]
}}
{...panResponder.panHandlers}
>
<View style={styles.box} />
</Animated.View>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: "center",
justifyContent: "center"
},
titleText: {
fontSize: 14,
lineHeight: 24,
fontWeight: "bold"
},
box: {
height: 150,
width: 150,
backgroundColor: "blue",
borderRadius: 5
}
});
export default App;
但是,我想 console.log 或者在 panresponder 移动时做一些计算,所以我尝试修改我的 opPanResponderMove 但蓝框不再移动。我想知道为什么?
我修改的代码:
onPanResponderMove: (event, gestureState) => {
console.log(event);
console.log(gestureState);
Animated.event([
null,
{ dx: pan.x, dy: pan.y }
])
},
你的问题有问题here
据说
Reason was because Animation.event() only generates the function which is used from onPanResponderMove, it also needs the default arguments evt, gestureState
这是解决方法:
onPanResponderMove: (event, gestureState) => {
console.log(event);
console.log(gestureState);
return Animated.event([
null,
{ dx: pan.x, dy: pan.y }
])(event,gestureState);
},