多个GMSMarker显示/隐藏消耗时间

时间:2018-04-11 04:52:46

标签: ios swift google-maps google-maps-sdk-ios

我在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中没有这样的属性。

那么我该怎么做才能提高性能。

2 个答案:

答案 0 :(得分:1)

实施将如下所示:

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
}

答案 1 :(得分:1)

让我们说这是你的标记数组

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
}