0

我在我的 React Native Android 项目中遇到了一个奇怪的错误。

有一个媒体控制器页面,其中实现了自定义音频播放器(使用Play/PauseNextPrevious按钮等),它在Android 模拟器上工作得很好,但是当我尝试在真实设备上单击它的任何按钮时,直到我按下它 10 次它才会响应。

我能想到的几个原因:

  • 整个页面响应一个平移手势,所以在模拟器上,点击事件被识别为点击,但在设备上,它识别为平移手势。

  • 我收到了大约 1,000 个警告Warning: You are manually calling a React.PropTypes validation function...(其中的解决方案可能是这个答案),它可能会影响应用程序的性能。  (此问题已修复,但仍会发生)

  • 应用程序中使用了几个仅适用于 iOS的库,例如react-native-streamingkitreact-native-mpremotecommandcenter,其中一个可能会导致问题。

我绕过它对吗?是否有其他原因导致该问题?

4

1 回答 1

0

我修复了这个错误 - 原因是我列出的原因中的第一名。

我的其中一个中的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。

于 2016-08-08T20:31:30.820 回答