В моем приложении есть функция радара, которая позволяет вам просматривать данные радара с предыдущих отметок времени. Чтобы сделать это, мне нужно быстро обновить наложение плиток, когда пользователь перемещает UISlider. У меня есть рабочая версия этого, но это очень медленно. Как я могу улучшить скорость, с которой представление карты обновляет наложение плитки? (Я звоню changeTile каждый раз, когда меняется UISlider)
class RadarViewController: UIViewController, MKMapViewDelegate {
var radarOverlay: MKTileOverlay?
var radarRenderer: MKTileOverlayRenderer?
var timestamps: [String]! {
didSet {
slider.isEnabled = true
}
}
func setupTile(timestamp: String) {
let template = "https://tilecache.rainviewer.com/v2/radar/" + timestamp + "/256/{z}/{x}/{y}/5/1_0.png"
let overlay = MKTileOverlay(urlTemplate: template)
overlay.tileSize = CGSize(width: 256, height: 256)
overlay.canReplaceMapContent = false
radarOverlay = overlay
mapView.addOverlay(overlay, level: .aboveRoads)
}
func changeTile(timestamp: String) {
let template = "https://tilecache.rainviewer.com/v2/radar/" + timestamp + "/256/{z}/{x}/{y}/5/1_0.png"
let overlay = MKTileOverlay(urlTemplate: template)
overlay.tileSize = CGSize(width: 256, height: 256)
overlay.canReplaceMapContent = false
radarOverlay = overlay
for o in mapView.overlays {
mapView.removeOverlay(o)
}
mapView.addOverlay(overlay, level: .aboveRoads)
mapView.setNeedsDisplay()
}
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if let o = radarOverlay {
radarRenderer = MKTileOverlayRenderer(tileOverlay: o)
return radarRenderer ?? MKOverlayRenderer()
}
return MKOverlayRenderer()
}
}