多个 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
}
我在 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
}