2010-02-03 18 views
26

Desidero aprire il callout a a livello di programmazione. Ad esempio, lascio cadere 10 pin sulla mappa e voglio aprire quello più vicino a me. Come potrei fare questo?Come aprire richiamare MKAnnotationView al livello di programmazione? (iPhone, MapKit)

Apple ha specificato il parametro "selezionato" per MKAnnotationView's, ma scoraggia l'impostazione diretta (non funziona, l'ho provato).

Per il resto MKAnnotationView ha solo setHighlighted (stessa storia), e può ShowCallout metodo ..

Eventuali suggerimenti se questo è possibile a tutti?

risposta

76

Nella vostra mapViewController creare un metodo di azione:

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

} 

Si può quindi determinare l'annotazione più vicino in base alla posizione attuale e camminare per le annotazioni disponibili nella matrice.

[mv annotations]; 

Una volta che l'annotazione più vicino è calcolato, chiamare:

[self openAnnotation:closestAnnotation]; 

Il MapView deve scorrere automaticamente di inserire il vostro annotazioni al centro dell'area di visualizzazione.

+0

Grazie Nate, per aver corretto l'errore di battitura. –

+0

Questo è un fantastico tizio .. –

+1

Se sai che l'annotazione che vuoi selezionare a livello di programmazione sarà nell'area visibile della mappa, puoi usare '[mv annotationsInMapRect: mv.visibleMapRect]'. Se stai lavorando con grandi serie di annotazioni sulle mappe, questo fornirà un incremento delle prestazioni. –

1

In rapida 3 questo viene aggiornato per:

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

e può essere chiamato con qualsiasi nota (si aprirà la vista annotazione didascalia e tentare di centrare l'annotazione nella mappa)

Ad esempio utilizzando la seconda annotazione in un elenco ipotetico di annotazioni.

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

Il tuo codice è uno strano mix di ObjC (le parentesi quadre) e Swift. Perché creare un array e poi scartarlo? –

Problemi correlati