为什么默认的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模拟器地图上呈现?我所得到的只是当前位置缓慢闪烁的蓝点。
答案
displayPriority
的MKMarkerAnnotationView
默认为.defaultLow
(尽管the documentation的MKAnnotationView
的displayPriority
建议应默认为.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模拟器中的地图上不呈现的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS MapKit 中,如何在地图旋转时为注释设置动画?