我创建了一个名为“PlaceAnnotationView”的自定义注释视图,如下所示:
viewForAnnotation
然后在 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation {
return nil
}
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "PlaceAnnotationView")
if annotationView == nil {
annotationView = PlaceAnnotationView(annotation: annotation, reuseIdentifier: "PlaceAnnotationView")
annotationView?.canShowCallout = true
}
return annotationView
}
中,我返回我的自定义注释视图,如下所示:
private func populateNearByPlaces() {
var region = MKCoordinateRegion()
region.center = CLLocationCoordinate2D(latitude: self.mapView.userLocation.coordinate.latitude, longitude: self.mapView.userLocation.coordinate.longitude)
let request = MKLocalSearchRequest()
request.naturalLanguageQuery = self.selectedCategory
request.region = region
let search = MKLocalSearch(request: request)
search.start { (response, error) in
guard let response = response else {
return
}
for item in response.mapItems {
let annotation = PlaceAnnotation()
annotation.title = item.name
annotation.subtitle = "subtitle"
annotation.mapItem = item
DispatchQueue.main.async {
self.mapView.addAnnotation(annotation)
}
}
}
}
以下是添加注释的代码:
import Foundation
import MapKit
class PlaceAnnotationView : MKPinAnnotationView {
override init(annotation: MKAnnotation?, reuseIdentifier: String?) {
super.init(annotation: annotation, reuseIdentifier: reuseIdentifier)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
以下是PlaceAnnotationView的代码:
class PlaceAnnotation : MKPointAnnotation {
var mapItem :MKMapItem!
}
以下是PlaceAnnotation的代码:
导入基金会 导入MapKit
viewForAnnotation
但我没有在地图上看到我的任何注释。对于我的每个注释,{{1}}被多次触发,但在屏幕上不显示任何内容。
答案 0 :(得分:2)
根据您(非常不情愿)选择显示的代码,似乎问题是您从未设置注释的coordinate
。但注释的coordinate
至关重要。这就是注释如何说明它应该在世界中的位置,以及与此注释关联的注释视图如何知道地图上的显示位置。因此,与此注释关联的注释视图不知道要在地图上显示的位置。因此不会出现。