我正在Mapview
使用快速语言进行开发。因为,我正在将 geojson 文件加载到我的地图视图中,它的加载成功。我正在加载GEOSwift
库。它工作正常,但是,发生了什么,在加载数据时,地图视图在 UI 中冻结/卡住了几秒钟,然后显示数据。即使在 Zooming 时间也冻结 UI 几秒钟。
我正在加载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
并且它从设备的 cpu 中占用了巨大的内存。
在滚动 mapview 或 zoomin/zoomout 时,它总是调用委托方法,这使得 mapview 冻结。
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")
}
我该如何解决这个问题?