react-native - 反应本机 PanResponder 偏移不起作用
问题描述
我试图在用户第一次发布时保持平底锅 Y 偏移 - 我已经查看了如何使用以下方法完成此操作,但偏移被忽略:
constructor(props) {
super(props);
this._pan = new Animated.ValueXY();
this._pan.addListener(value => {
this._value = value;
const {height: windowHeight} = Dimensions.get('window');
this.props.onZoomProgress(
Math.min(Math.max((value.y * -1) / windowHeight, 0), 0.5),
);
});
this._panResponder = PanResponder.create({
onMoveShouldSetResponderCapture: () => true,
onMoveShouldSetPanResponderCapture: () => true,
onPanResponderGrant: (e, gestureState) => {
this._pan.setOffset({x: 0, y: gestureState.dy});
this._pan.setValue({x: 0, y: 0});
},
onPanResponderMove: (e, gestureState) => {
this._pan.setValue({y: gestureState.dy, x: 0});
console.log(this._pan.y);
},
onPanResponderRelease: (e, gestureState) => {
this._pan.extractOffset();
},
});
}
这是此功能的单独组件,因此我this.props.onZoomProgress()
用于传递值以用作主要组件中的缩放状态。
干杯!
解决方案
我不确定这是您的问题,但您直接访问您的Animated.ValueXY
外观内部价值的部分对我来说是可疑的。通常,如果您想获得实际数字而不是让动画值完成工作,通常会添加一个侦听器。
像这样的东西:
this._pan.addListener(value => {
this._value = value;
const {height: windowHeight} = Dimensions.get('window');
this.props.onZoomProgress(Math.min(Math.max((value.y * -1) / windowHeight, 0), 0.5))
});
需要注意的重要一点是,您不会直接获取 Animated Value 的值,您可以将对象分配给 Animated 组件并神奇地更新,或者您设置一个侦听器,并获取传入的值你。
推荐阅读
- selenium - 范围报告:在并行执行测试时,测试步骤正在范围报告中的最后一个测试中合并
- google-cloud-firestore - 在 Angular 服务中映射来自 Firestore 的文档参考字段
- mongodb - 添加多个键/值
- excel - Excel vba:将字符串转换为日期时间将其添加到新列
- java - @Schedule 启动两次
- electron - 重命名电子打包器生成的 .zip 文件
- c# - 在文本框上绘制矩形
- node.js - 将 AwaitReactions 的结果传递到函数 discord.js 之外
- javascript - 如何翻译枚举值?
- css - 角材料对话框内的 4 列布局