onRegionChangeComplete 函数使用 React Native 地图多次调用

Hus*_*aik 6 react-native react-native-android react-native-ios react-native-maps

我想在地图中移动某个位置时更改我的初始区域,为此我使用了 onRegionChangeComplete 功能,但它一次调用两次或三次。

这是我的代码:

onRegionChangeComplete(region) {
    if(!this.state.initialRegionChange){
      console.log("changeRegion:"+JSON.stringify(region))
      var initialRegion = {
        latitude: region.latitude,
        longitude :region.longitude,
        latitudeDelta: LATITUDE_DELTA,
        longitudeDelta: LONGITUDE_DELTA
      }
      var lat = parseFloat(region.latitude)
      var lang = parseFloat(region.longitude)
    }else{
      this.setState({
        initialRegionChange:false
      })
    }
  }

render(){
  return(
    <MapView
          ref="map"
          style={styles.map}
          initialRegion={this.state.region}
          provider={MapView.PROVIDER_DEFAULT}
          zoomEnabled={true}
          onRegionChangeComplete={this.onRegionChangeComplete.bind(this)}
          pitchEnabled={true}
          showsCompass={true}
          showsBuildings={true}
          showsUserLocation={true}
          showsTraffic={true}
          showsIndoors={true}
          />
    )
}
Run Code Online (Sandbox Code Playgroud)

请给我建议如何解决这个问题。

非常感谢任何帮助。

这是我正在关注的模块链接。 https://github.com/react-community/react-native-maps

Mat*_*ias 10

这可能是一个老问题,但我会提供对我有用的内容以供参考。就我而言,只是区域的精度发生了变化onRegionChangeComplete,这使地图认为该区域已更改。为了解决这个问题,我只是将输入区域与先前设置的区域进行了比较,但在比较中将坐标的小数位数限制为 6。像这样的东西:

onRegionChange = (region) => {
    if(region.latitude.toFixed(6) === this.state.region.latitude.toFixed(6)
      && region.longitude.toFixed(6) === this.state.region.longitude.toFixed(6)){
        return;
    }

    this.setState({region});
}
Run Code Online (Sandbox Code Playgroud)


Par*_*ler 1

这是一个已记录的问题react-native-maps,甚至提交了一个拉取请求来修复它: https: //github.com/react-community/react-native-maps/pull/1597。您可以立即将拉取请求合并到本地副本中react-native-maps,或者等待它被发布。我建议添加您对 PR 的支持,以引起更多关注并使其更快合并。我知道这不能解决您的问题,但目前您无法在源代码中执行任何操作来修复它 - 您需要更改库本身。希望这可以帮助!