Ich habe ein Problem mit den Callout-Informationen einer ziehbaren Annotation: Ich verwende einen MKReverseGeocoder, um die Adresse der Koordinaten zu erhalten, die der Annotationsposition entsprechen.Draggable Annotation mit iOS: Callout Info Update
Aber es gibt etwas, das ich nicht kontrollieren kann: Jedes Mal, wenn die ziehbare Annotation gelöscht wird, erscheinen die Callout-Informationen. Sehr oft hatte der MKReverseGeocoder keine Zeit, die Adressinformationen zu aktualisieren, bevor dies geschah. In diesen üblichen Fällen zeigt das Annotation-Callout die Adressinformationen, die den vorherigen Koordinaten der Annotation entsprechen. Hier
ist der Code:
1) Delegate-Methode aufgerufen, wenn Anmerkung fallen gelassen wird:
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState{
if (oldState == MKAnnotationViewDragStateDragging) {
MKReverseGeocoder *reverseGeocoder = [[MKReverseGeocoder alloc] initWithCoordinate:annotationView.annotation.coordinate];
reverseGeocoder.delegate = self;
[reverseGeocoder start];
while (reverseGeocoder.querying) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
[reverseGeocoder release];
}
}
2) Delegate-Methode aufgerufen, wenn reverseGeocoder eine Antwort findet:
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark {
NSString *newSubtitle = [NSString stringWithFormat:@"%@ %@, %@ %@, %@",placemark.subThoroughfare,placemark.thoroughfare,placemark.postalCode,placemark.locality, placemark.country];
Grocery *draggableGrocery = [myMapView.annotations objectAtIndex:0];
draggableGrocery.address = newSubtitle;
self.addressNewGrocery = newSubtitle;
}
Jede Idee ?
Danke!
Dank Noor das funktioniert. Es ist wahrscheinlich nicht die eleganteste Lösung, da das alte Callout auftaucht und dann fast sofort verschwindet, aber es ist besser, dass die Informationen nicht aktualisiert werden. Etwas Seltsames: Ich habe versucht, diese Methoden zum Auswählen und Abwählen in anderen Delegatfunktionen wie - (void) mapView zu verwenden: (MKMapView *) mapView-AnnotationView: (MKAnnotationView *) annotationView didChangeDragState: (MKAnnotationViewDragState) newState vonOldState: (MKAnnotationViewDragState) oldState; aber es hatte keinen Effekt! Weißt du, warum ? – Johanisma
Ja, ich stimme zu, dass meine Lösung nicht die beste ist! Ich postete tatsächlich eine schlechtere Lösung, dann bearbeitete ich die Antwort^_ ^, ich entfernte die Annotation selbst, fügte sie dann aus der mapView hinzu und wählte sie aus ... Nun, Sie können nicht das Gleiche machen didChangeDragState-Methode !! weil einfach die Callout Info noch nicht geändert wurde !! sie wurden nur in der didFindPlacemark-Methode geändert;) –