2010-02-03 12 views
26

Je veux ouvrir la légende pour un MKPinAnnotationView par programme. Par exemple, je laisse tomber 10 épingles sur la carte, et je veux ouvrir celui qui est le plus proche de moi. Comment ferais-je cela?Comment ouvrir appel MKAnnotationView par programme? (iPhone, MapKit)

Apple a spécifié le paramètre 'sélectionné' pour MKAnnotationView's, mais déconseille de le définir directement (cela ne fonctionne pas, essayez-le).

Pour le reste MKAnnotationView a seulement setHighlighted (même histoire), et peut ShowCallout méthode ..

Les conseils si cela est possible?

Répondre

76

Dans votre mapViewController créer une méthode d'action:

- (void)openAnnotation:(id)annotation 
{ 
    //mv is the mapView 
    [mv selectAnnotation:annotation animated:YES]; 

} 

Vous pouvez ensuite déterminer l'annotation la plus proche en fonction de l'emplacement actuel et la marche des annotations disponibles dans le tableau.

[mv annotations]; 

Une fois l'annotation la plus proche est calculé, appelez:

[self openAnnotation:closestAnnotation]; 

Le Mapview doit défiler automatiquement placer l'annotation dans le centre de la zone d'affichage.

+0

Merci Nate, pour avoir corrigé la faute de frappe. –

+0

Cest génial mec .. –

+1

Si vous connaissez l'annotation que vous souhaitez sélectionner par programmation sera dans la zone visible de la vue de la carte, vous pouvez utiliser '[mv annotationsInMapRect: mv.visibleMapRect]'. Si vous travaillez avec de grands ensembles d'annotations cartographiques, cela augmentera les performances. –

1

Dans rapide 3 ceci est mis à jour:

func openAnnotation(annotation: MkAnnotation) { 
_ = [mapView .selectAnnotation(annotation, animated: true)] 
} 

et peut être appelé en utilisant une annotation (cela ouvrira la vue de détail d'annotation et tenter de centrer l'annotation sur la carte)

Par exemple utiliser la deuxième annotation dans une liste hypothétique d'annotations.

openAnnotation(annotation: mapView.annotations[1]) 
+0

Votre code est un mélange étrange de ObjC (les crochets) et Swift. Pourquoi créer un tableau puis le supprimer? –