【发布时间】:2020-09-14 00:06:15
【问题描述】:
MKMapView 类已添加并分配委托:
let mapView: MKMapView = {
let map = MKMapView()
map.translatesAutoresizingMaskIntoConstraints = false
return map
}()
override func viewDidLoad() {
self.view.addSubview(mapView)
mapView.delegate = self
let center = mapView.centerCoordinate
NSLayoutConstraint.activate([
mapView.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor, constant: 0),
mapView.leftAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leftAnchor, constant: 0),
mapView.rightAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.rightAnchor, constant: 0),
mapView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor, constant: 0)
])
}
然后将mapView 分配给center 坐标并设置跨度。 zoomLevel 设置为 1
let span = MKCoordinateSpan(latitudeDelta: 0, longitudeDelta: 360 / pow(2, Double(zoomLevel)) * Double(mapView.frame.size.width) / 256)
setRegion(MKCoordinateRegion(center: coordinate, span: span), animated: animated)
// 我这样写 URL 是因为我被告知 MKTileOverlay 类将处理 z、x 和 y 值。
let urlTemplate = "https://tile.openweathermap.org/map/temp_new/{z}/{x}/{y}.png?appid={my API ID}"
//urlTemplate被添加到MKTileOverlay
let overlay = MKTileOverlay(urlTemplate: urlTemplate)
overlay.canReplaceMapContent = true
// 而就在我准备将overlay 添加到mapView 时,应用程序会崩溃:
self.mapView.addOverlay(overlay)
// 它把我带到AppDelegate.swift,然后它显示这条消息:
Thread 1: Exception: "Expected a MKTileOverlay but got (null)"
所有内容都添加到viewDidLoad()。
我还添加了renderedFor 委托函数。像这样:
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
var renderer = MKTileOverlayRenderer()
print("overlay rendered For: \(overlay)")
if overlay is MKTileOverlay {
renderer = MKTileOverlayRenderer(overlay:overlay)
renderer.alpha = 0.8
}
return renderer
}
【问题讨论】:
-
我尝试在 x、y、z 值中输入数字以查看 URL 是否有效。我输入了它,它正在工作。所以服务器不是问题。
标签: ios swift mapkit mktileoverlay