MapView зависает на несколько секунд при загрузке тысяч данных и времени увеличения в iOS
Я развиваюсь Mapview
на быстром языке. Для того, что я загружаю файл geojson в мой mapview, его загрузка успешно. Я загружаю с GEOSwift
библиотека. Работает нормально, но, что происходит, при загрузке данных представление карты зависает / застревает на несколько секунд в пользовательском интерфейсе, а затем показывает данные. Даже в то время как время масштабирования также останавливает пользовательский интерфейс на несколько секунд.
Я загружаю LineString
введите данные с координатами около 7000 данных.
Даже я делаю анализ данных только в фоновом потоке.
У меня есть две 3 вкладки для загрузки разных данных в моей карте с 3 geojson
файлы. Даже при переключении одних данных на другие они замерзают.
При отладке следуют ошибки печати при увеличении / уменьшении масштаба карты.
[VKDefault] Tile 11720.7599.14 (128) in current unloaded state for 0.01 seconds - Raster Overlays Above Labels - Failed to decode (terminal) (0.01 sec)
Мой код выглядит следующим образом.
@IBAction func mapDataAction(_ sender: Any) {
let overlays = mapView.overlays
mapView.removeOverlays(overlays)
self.mapView.removeAnnotations(mapView.annotations)
DispatchQueue.global(qos: .background).async {
if let geoJSONURL = Bundle.main.url(forResource: “LineString”, withExtension: "geojson") {
do {
var overlays = [MKPolyline]()
let features = try Features.fromGeoJSON(geoJSONURL)
for item in features! {
if let item = item.geometries![0] as? LineString {
let polyLine = item.mapShape() as! MKPolyline
overlays.append(polyLine)
}
}
DispatchQueue.main.async {
// add overlays to map
self.mapView.addOverlays(overlays)
}
} catch {
//handle error
}
}
}
}
И однажды приложение выходит из строя со следующим сообщением, брошенным в консоль.
Terminated due to memory issue
И это берет огромную память от процессора устройства.
При прокрутке вида карты или ее увеличении / уменьшении всегда вызывается метод делегата, что приводит к зависанию вида карты.
public func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if let polyline = overlay as? MKPolyline {
let renderer = MKPolylineRenderer(polyline: polyline)
//renderer.fillColor = UIColor.blue.withAlphaComponent(0.5)
renderer.strokeColor = UIColor.blue.withAlphaComponent(0.8)
renderer.lineWidth = 5
print("MKPolylineRenderer delegate calling")
return renderer
}
return MKOverlayRenderer(overlay: overlay)
// fatalError("Unexpected overlay type")
}
Как я могу решить это?