我在React Native Android项目中遇到了一个奇怪的错误。
有一个媒体控制器页面,其中实现了自定义音频播放器(播放/暂停,下一步,上一页按钮等),它在 Android模拟器上运行得很好,但是当我尝试点击真实设备上的任何按钮时,它只是在我按下它之后才会响应次。
我能想到的几个原因:
整个页面响应平移手势,因此在模拟器上,点击事件被识别为点击,但在设备上,它将其识别为平移手势。
我得到了(此问题已修复,但仍然会发生)Warning: You are manually calling a React.PropTypes validation function...
(其解决方案可能是this answer)的1,000个警告,它可以与应用程序的性能一起发挥作用。
应用中有几个库仅针对iOS 实施,例如react-native-streamingkit和react-native-mpremotecommandcenter,其中一个可能导致问题。
我能绕过它吗?可能有任何其他原因导致问题吗?
答案 0 :(得分:0)
我修复了错误 - 原因是我列出的那个中的#1。
我的一个onMoveShouldSetPanResponderCapture()
中的PanResponder
函数包含此代码:
onMoveShouldSetPanResponderCapture: (evt, gestureState) => {
return dx != 0 && dy != 0 && this._canPan;
}
换句话说,代码设置了将点按手势和平移手势区分为零的阈值!
我按照以下方式进行了更改,现在工作得非常好:
onMoveShouldSetPanResponderCapture: (evt, gestureState) => {
return (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5) && this._canPan;
}
如果您愿意,请将阈值设置为10px。