Несколько GMSMarker Показать / Скрыть потребляет время
У меня есть около 4000 маркеров на карте GoogleMap, и я не использую кластеризацию. Итак, на данный момент то, что я делаю, чтобы показать/ скрыть маркеры на карте, находится ниже.
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 ответа:
Допустим, это Ваш массив маркеров
var markers = [GMSMarker]()
Подготовьте словарь маркеров, предположим, что Ваш идентификатор устройства находится в Int
func prepareMarkersDict(markers:[GMSMarker]) -> [Int:GMSMarker]{ var markerDict = [Int:GMSMarker]() for marker in markers{ markerDict[marker. deviceID] = marker } return markerDict }
Ваш массив идентификаторов устройств, который вы хотите скрыть
var arrDeviceIDToHide = [Int]()
Теперь повторите его и спрячьте маркер
let markerDict = prepareMarkersDict(markers:markers) for deviceId in arrDeviceIDToHide{ let marker = markerDict[deviceId] marker?.map = nil }