Ich bin gerade dabei, eine Anwendung für iOS zu entwickeln, und habe ein Problem mit benutzerdefinierten Anmerkungen in meiner Kartenansicht festgestellt. HierEigenartiges Anmerkungsverhalten beim Hinzufügen/Entfernen von Anmerkungen
ist die Idee:
1) I in der Benutzer Lage auf der Karte zu laden, von dieser Stelle ich eine Anfrage an meine Back-End-Server senden, alle Sehenswürdigkeiten in der Umgebung abzurufen.
2) Ich habe eine benutzerdefinierte Anmerkung wie folgt:
class CustomPointAnnotation: MKPointAnnotation {
var imageName: String?
var activeImageName : String?
var trainCrossingId : Int?
var notificationCount : UILabel = UILabel()
var labelIsHidden : Bool = true
}
, wenn ich die Anmerkungen auf der Karte hinzufügen, ich dynamisch bin Einstellung der notificationCount
Etikettendaten zu verwenden, die ich von meinem Firebase Datenbank abgerufen haben.
3) Ein Benutzer kann die Größe des Radius um seine aktuelle Position erhöhen/verringern. Wenn dieser neue Radius ausgewählt ist, verwende ich mapView.removeAnnotations(mapView.annotations)
, um alle Anmerkungen zu entfernen und diese Anmerkungen dann mit den neuen Daten erneut hinzuzufügen, die vom Server mit dem ausgewählten Radius abgerufen wurden.
Das Problem:
Wenn zunächst die Ansicht geladen, die Anmerkungen mit den richtigen Etiketten wie erwartet arbeiten gesetzt usw.
Sobald jedoch aktualisiert ein Benutzer den Radius und ich entfernen/hinzufügen Vorherige Anmerkungen, die Anmerkungen und ihre entsprechenden Bezeichnungen zeigen nicht wie erwartet an.
Zum Beispiel ist es das, was die Karte aussieht, wenn zuerst in die Ansicht eingeben:
Und dann, wenn ich die Größe des Radius ändern:
Die erwarteten Daten ist, was im Anfangsbild angezeigt wird (beim ersten Aufruf der Ansicht), aber wenn der Radius aktualisiert wird, wird der Z-Wert meiner Anmerkungen nicht berücksichtigt und notificationCount
ist nicht korrekt (z. B. sollte der dritte Punkt im zweiten Diagramm gefunden werden) habe kein Etikett). Das ist seltsam, da ich print-Anweisungen und Breakpoints eingerichtet habe, um jede Annotation in func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {...}
zu überwachen, und die Werte sind korrekt und was ich erwarte, jedoch zeigt die Ansicht diese Werte nicht an.
Irgendwelche Ideen, was hier schief gehen könnte? Danke im Voraus!
Bearbeiten gehören die folgenden mapView Delegierten:
// Custom annotation view
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if !(annotation is CustomPointAnnotation) {
return nil
}
let reuseId = "trainPin"
var anView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
if anView == nil {
anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
}
else {
anView?.annotation = annotation
}
let cpa = annotation as! CustomPointAnnotation
let icon : UIImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 32, height: 32))
icon.image = UIImage(named:cpa.imageName)
icon.layer.zPosition = 1
anView?.rightCalloutAccessoryView = cpa.annotationButton
anView?.addSubview(cpa.notificationCount)
anView?.addSubview(icon)
anView?.frame = CGRect(x: 0, y:0, width:32, height:32)
anView?.canShowCallout = true
return anView
}
können Sie Ihren Code schreiben für 'func mapView (_ mapView: MKMapView, viewFor Anmerkung: MKAnnotation) -> MKAnnotationView'? – chengsam
Sicher, ich habe gerade bearbeitet, um es in die ursprüngliche Frage hinzuzufügen. Danke @chengsam – Dayna