关于用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
,尽管有时必须为动态标记打开它们。我将不胜感激! 最好的问候