Anzeige habe ich eine benutzerdefinierte Anmerkung Ansicht namens „PlaceAnnotationView“ wie unten dargestellt:AnnotationView Nicht
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")
}
}
Dann in viewForAnnotation
ich meine benutzerdefinierten Anmerkungsansicht zurückzukehren, wie gezeigt:
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
}
Hier ist der Code Anmerkungen hinzufügen:
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)
}
}
}
}
Hier ist der Code für PlaceAnnotati OnView:
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")
}
}
Hier ist der Code für PlaceAnnotation:
Import Foundation Import MapKit
class PlaceAnnotation : MKPointAnnotation {
var mapItem :MKMapItem!
}
Aber ich sehe keine meiner Anmerkungen auf der Karte angezeigt werden. Die viewForAnnotation
wird für jede meiner Anmerkungen mehrere Male ausgelöst, aber nichts auf dem Bildschirm angezeigt.
Wie haben Sie Ihre MKAnnotation hinzugefügt? Kannst du uns den Code dafür zeigen? –
Sie müssen viel mehr Code zeigen. Zeigen Sie, wo Sie Anmerkungen zur Kartenansicht hinzufügen. Zeigen Sie PlaceAnnotationView an. Beachten Sie auch, dass Ihre Implementierung von 'viewForAnnotation' für den Fall falsch aussieht, in dem eine Anmerkungsansicht wiederverwendet wird. Sie können die Annotation der Annotation nicht festlegen. – matt
@matt Ich habe den Code aktualisiert. Ich bin mir nicht sicher, ob ich verstehe, was Sie mit der Implementierung von viewForAnnotation falsch sehen. –