为什么默认的mapkit注释不会在iOS模拟器中的地图上不呈现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么默认的mapkit注释不会在iOS模拟器中的地图上不呈现相关的知识,希望对你有一定的参考价值。

我正在使用MKAnnotation协议来帮助在我的ios模拟器地图上显示默认标记注释,但看不到它呈现。

这是我创建的DriverAnnotation类;

class DriverAnnotation: NSObject, MKAnnotation {
    var coordinate: CLLocationCoordinate2D
    var uid: String

    init(uid: String, coordinate: CLLocationCoordinate2D) {
        self.uid = uid
        self.coordinate = coordinate
    }
}

这里是使用它的代码,应该在地图上显示标记注释;

    func fetchDrivers() {
        guard let location = locationManager?.location else { return }
        Service.shared.fetchDrivers(location: location) { (driver) in
            guard let coordinate = driver.location?.coordinate else { return }
            let annotation = DriverAnnotation(uid: driver.uid, coordinate: coordinate)
            self.mapView.addAnnotation(annotation)
        }

    }

那么为什么注释不会在iOS模拟器地图上呈现?我所得到的只是当前位置缓慢闪烁的蓝点。

map annotation missing

答案

displayPriorityMKMarkerAnnotationView默认为.defaultLow(尽管the documentationMKAnnotationViewdisplayPriority建议应默认为.required

因此,您想要一个MKMarkerAnnotationView.required,然后要声明一个注释视图类,将该类设置为.required

class RequiredMarkerAnnotationView: MKMarkerAnnotationView {
    override init(annotation: MKAnnotation?, reuseIdentifier: String?) {
        super.init(annotation: annotation, reuseIdentifier: reuseIdentifier)
        displayPriority = .required
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override var annotation: MKAnnotation? {
        didSet {
            displayPriority = .required
        }
    }
}

mapView.register(RequiredMarkerAnnotationView.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier)

以上是关于为什么默认的mapkit注释不会在iOS模拟器中的地图上不呈现的主要内容,如果未能解决你的问题,请参考以下文章

MapKit 地图 - 注释未显示在模拟器上

在 iOS MapKit 中,如何在地图旋转时为注释设置动画?

我的 Swift MapKit 注释没有显示

iOS MapKit,细节较少

mapView 中的用户位置未显示在多个模拟器设备(MapKit)上

mapkit 中的 iOS Pin 颜色问题