多个 GMSMarker show/hide 消耗时间

Multiple GMSMarker show/hide consumes time

我在 GoogleMap 上有大约 4000 个标记,但我没有使用聚类。所以,目前我在地图上显示/隐藏标记的操作如下。

marker.map = nil 
marker.map = mapView

在某些情况下,我需要过滤掉一些标记并使它们可见,否则应该隐藏。所以我可以用大约代码来实现它,但需要时间。

markers.forEach { (marker) in
                if !arrDeviceID.contains(marker.deviceID ?? "") {
                        marker.map = nil
                } else {
                        marker.map = self.googleMapView
                }
            }

同样,在 Android 中有一个 属性 Visibility 可以完美快速地工作。但是在iOS中没有这样的属性。

那么我可以做些什么来提高性能。

实施将类似于以下内容:

var markers: [Int: GMSMarker] = [:]
func addMarker(with identifier: Int) {
 let marker = GMSMarker(position: someCoordinates)
 markers[identifier] = marker
}
func removeMarker(with identifier: Int) {
  markers[identifier]?.map = nil
}

假设这是你的标记数组

var markers = [GMSMarker]()

准备标记字典,假设您的设备 ID 是 Int

func prepareMarkersDict(markers:[GMSMarker]) -> [Int:GMSMarker]{
    var markerDict = [Int:GMSMarker]()
    for marker in markers{
        markerDict[marker. deviceID] = marker
    }
    return markerDict
}

您要隐藏的设备 ID 数组

var arrDeviceIDToHide = [Int]()

现在迭代它并隐藏标记

let markerDict = prepareMarkersDict(markers:markers)
for deviceId in arrDeviceIDToHide{
   let marker = markerDict[deviceId]
   marker?.map = nil
}