首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试将MKTileOverlay对象添加到MKMapView时出现错误"Expected a MKTileOverlay但got (null)“

尝试将MKTileOverlay对象添加到MKMapView时出现错误"Expected a MKTileOverlay但got (null)“
EN

Stack Overflow用户
提问于 2020-05-27 11:13:59
回答 1查看 75关注 0票数 0

添加了MKMapView类并为其分配了委托:

代码语言:javascript
复制
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

代码语言:javascript
复制
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类将处理zxy值。

代码语言:javascript
复制
let urlTemplate = "https://tile.openweathermap.org/map/temp_new/{z}/{x}/{y}.png?appid={my API ID}"

//在MKTileOverlay中添加urlTemplate

代码语言:javascript
复制
            let overlay = MKTileOverlay(urlTemplate: urlTemplate)

            overlay.canReplaceMapContent = true

//就在我要向mapView添加overlay的时候,应用程序崩溃了:

代码语言:javascript
复制
self.mapView.addOverlay(overlay)

//它将我带到AppDelegate.swift,然后显示以下消息:

代码语言:javascript
复制
Thread 1: Exception: "Expected a MKTileOverlay but got (null)"

所有内容都添加到了viewDidLoad()中。

我还添加了renderedFor委托函数。如下所示:

代码语言:javascript
复制
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
}
EN

回答 1

Stack Overflow用户

发布于 2020-10-16 20:36:01

我也有同样的问题,导致我崩溃的原因是没有指定覆盖的MKTileOverlayRenderer()的初始化。

所以基本上,你在mapView(_:rendererFor:)委托方法中的代码应该是:

代码语言:javascript
复制
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {

    print("overlay rendered For: \(overlay)")

    if let overlay = overlay as? MKTileOverlay {
        renderer = MKTileOverlayRenderer(overlay: overlay)
        renderer.alpha = 0.8
        return renderer.alpha
    } else {
        return MKOverlayRenderer(overlay: overlay)
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62034817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档