【问题标题】:onRegionChangeComplete function calling multiple times using react native maps使用反应原生地图多次调用 onRegionChangeComplete 函数
【发布时间】:2017-12-15 12:15:11
【问题描述】:

我想在地图中移动某个位置时更改我的初始区域,我为此使用了 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}
          />
    )
}

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

非常感谢任何帮助。

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

【问题讨论】:

  • 你可以通过 Logic 来处理。定义一些特定的半径或距离。所以你的 onRegionChangeComplete 不会工作两次或三次

标签: react-native react-native-android react-native-ios react-native-maps


【解决方案1】:

这可能是一个老问题,但我会提供对我有用的东西以供参考。在我的情况下,只是区域的精度发生了变化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});
}

【讨论】:

    【解决方案2】:

    使用react-native-maps version =&gt; v0.28.0,iOS 中没有这个问题,

    对于安卓:-

    onRegionChangeComplete 在区域更改时调用一次,例如当用户完成移动地图时。第二个参数是一个包含有关移动的更多详细信息的对象。 isGesture 属性指示移动是来自用户 (true) 还是动画 (false)。注意:isGesture 仅受 Google 地图支持。

    onRegionChangeComplete={(region, gesture) => {
                  if (Platform.OS === 'android') {
                    if (gesture.isGesture) {
                      onRegionChange(region);
                    }
                  } else {
                    onRegionChange(region);
                  }
                
              }}
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-19
        • 1970-01-01
        • 2020-04-15
        • 2021-01-01
        相关资源
        最近更新 更多