2011-04-22 2 views
4

J'ai besoin de changer la propriété centerOffset d'un AnnotationView lorsque le niveau de zoom a changé. Je ne veux pas supprimer et ajouter le Annotations à nouveau.Mettre à jour AnnotationAfficher après/pendant le zoom

Alors, comment puis-je accéder et mettre à jour le AnnotationViews après un zoom?

Des idées à ce sujet?

Cordialement, Christian

Répondre

4

Une solution serait d'utiliser ces MKMapView méthodes:

- (NSSet *)annotationsInMapRect:(MKMapRect)mapRect // iOS4.2+ only! 

pour récupérer les annotations visibles, puis utilisez:

- (MKAnnotationView *)viewForAnnotation:(id<MKAnnotation>)annotation; 

Pour obtenir la vue correspondante (ne devrait jamais retourner à zéro si la première fonction le fait correctement)

Alors je suppose que le changement centerOffset devrait faire le travail, (plus peut-être un peu -[UIView setNeedsDisplay/Layout] pour forcer un redessiner)

Changement centerOffset selon zoomLevel peut paraître étrange, mais je suppose que vous avez vos raisons :)

+0

Merci pour cette . J'ai utilisé la propriété mapView.annotations pour obtenir les annotations (<4,2 depl. Target). Pour mettre à jour les annotations, j'ai dû réaffecter les coordonnées. 'SetNeedsDisplay' etc ne fonctionnait pas:' CLLocationCoordinate2D foo = annotation.coordinate; [annotation setCoordinate: foo]; ' Raison du changement de décalage pendant le zoom: nous avons une superposition de carte avec des bâtiments 3D et nous voulions afficher les annotations sur les toits pour l'expérience visuelle. Le client peut fournir un décalage sur le côté backend. En raison de la taille différente après le zoom avant/arrière, le décalage devait être recalculé. – cweinberger

+0

ah je vois, je savais qu'il y avait une raison à cela, merci pour vos commentaires :) –