更改反应本机映射中的区域时,状态更新会延迟

时间:2020-10-20 23:00:23

标签: react-native google-maps zoom react-native-maps

关于用resp更新标记,我有以下问题。到 react-native-maps 中的某个缩放级别。

我在市区(约900个)中有大量标记,这些标记具有3种不同的形状,即点,圆和旋转的圆,这取决于标记数据(尽管大多数是静态的)。

代替实现聚类(以避免地图上的点过载) 我想实现两个不同的缩放级别,可以在这些缩放级别上更改地图上的标记。 首先,我只想根据缩放级别显示/删除它们。

我的方法很简单:

const markers = (didChangeRegion === 1) ? null:this.allVenueMapMarkers()

<MapView
     ref={(ref)=>{this.mapView=ref}}
     initialRegion={this.state.region}
      provider={MapView.PROVIDER_GOOGLE}
     customMapStyle={mapStyle}
     style={{
      ...StyleSheet.absoluteFillObject,
     }}
     toolbarEnabled={false}
     onRegionChange={region => this.onRegionChange(region)}
     >
     {markers}
</MapView>

allVenueMapMarkers输出相应的标记组件的地方。

onChangeRegion中,我使用以下指标跟踪当前的缩放级别:

const delta  = Math.sqrt(region.longitudeDelta*region.longitudeDelta + region.latitudeDelta*region.latitudeDelta)

,我有一个状态变量didChangeRegion,该变量跟踪此增量的变化。如果缩放级别超过2,我将更改didChangeRegion: 1的状态,并在其delta <2时再次将其设置回didChangeRegion: 0。 (感觉是我不希望不断更新状态,而仅当我们越过缩放级别delta = 2时才可以。)

如果此增量发生变化(> 2),我将状态更新为“删除”所有点,如果在下面,则应显示所有点。

结果: 在我的Android设备上,更改缩放级别似乎没有任何延迟(即显示/删除标记) 但是在iOS上,我确实有4秒的延迟,有时甚至更长。

问题: 出现这种滞后的原因可能是什么? 我究竟做错了什么? 是否有更好的方法来更改我错过的缩放级别的标记?

注意:

  • 现在我关闭了tracksViewChanges,尽管有时必须为动态标记打开它们。

我将不胜感激! 最好的问候

0 个答案:

没有答案