MapView se congela durante unos segundos mientras carga miles de datos y acerca el tiempo de acercamiento en iOS
Estoy desarrollandoMapview
En lenguaje rápido. Para, que estoy cargando el archivo geojson en mi vista de mapa, se está cargando correctamente. Estoy cargando conGEOSwift
biblioteca. Está funcionando bien, pero, qué sucede, mientras cargaba datos, la vista del mapa se congelaba / atascaba durante unos segundos en la interfaz de usuario y luego mostraba datos. Incluso mientras el tiempo de zoom también congela la interfaz de usuario unos segundos.
Estoy cargandoLineString
escriba datos con coordenadas alrededor de 7000 datos.
Incluso estoy analizando los datos solo en el hilo de fondo.
Tengo dos 3 pestañas para cargar diferentes datos en mi mapa con 3geojson
archivos Incluso al cambiar un dato a otro, se está congelando.
En la depuración se sigue la impresión de error al acercar / alejar la vista del mapa.
[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)
Mi código es el siguiente.
@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
}
}
}
}
Y una aplicación única se bloquea con el siguiente mensaje lanzado en la consola.
Terminated due to memory issue
Y está tomando una gran memoria de la CPU del dispositivo.
Mientras se desplaza la vista de mapa o acerca / aleja, su llamado siempre es el método delegado, lo que hace que congele la vista de mapa.
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")
}
¿Como puedo resolver esto?