我正在开发Mapview
用快捷的语言。因为,我正在将 geojson 文件加载到我的地图视图中,它加载成功。我正在加载GEOSwift
图书馆。它工作正常,但是,发生了什么,在加载数据时,地图视图在 UI 中冻结/卡住几秒钟,然后显示数据。即使缩放时间也会使 UI 冻结几秒钟。
我正在加载LineString
键入坐标大约 7000 个数据的数据。
即使我只是在后台线程中解析数据。
我有两个 3 个选项卡,用于在我的地图中加载不同的数据 3geojson
文件。即使将一个数据切换到另一数据时,它也会变得冻结。
在调试中,放大/缩小地图视图时会出现以下错误打印。
[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中占用大量内存。
当滚动地图视图或放大/缩小时,它始终调用委托方法,这使得地图视图冻结。
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")
}
我该如何解决这个问题?