2010-02-03 23 views
26

Quiero abrir la llamada para un MKPinAnnotationView mediante programación. Por ejemplo, dejo caer 10 alfileres en el mapa y quiero abrir el que está más cerca de mí. ¿Cómo voy a hacer esto?¿Cómo abrir invocar MKAnnotationView programmatically? (iPhone, MapKit)

Apple ha especificado el parámetro "seleccionado" para MKAnnotationView's, pero desalienta la configuración directa (esto no funciona, lo probé).

Para el resto MKAnnotationView sólo tiene un setHighlighted (misma historia), y puede ShowCallout método ..

Alguna pista si esto es posible en absoluto?

Respuesta

76

En su mapViewController crear un método de acción:

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

} 

A continuación, puede determinar la anotación más cercano basado en la ubicación actual y caminando por las anotaciones disponibles en la matriz.

[mv annotations]; 

vez que se calcula la anotación más cercano, llame al:

[self openAnnotation:closestAnnotation]; 

El MAPview debe desplazar automáticamente al colocar su anotación en el centro del área de visualización.

+0

Gracias Nate, por corregir el error tipográfico. –

+0

Thats awesome dude .. –

+1

Si sabe que la anotación que desea seleccionar mediante programación estará en el área visible de la vista del mapa, puede usar '[mv annotationsInMapRect: mv.visibleMapRect]'. Si está trabajando con conjuntos grandes de anotaciones de mapas, esto proporcionará un aumento en el rendimiento. –

1

en Swift 3 esta se actualiza para:

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

y puede ser llamado usando cualquier anotación (esto abrirá la vista de anotación de llamada e intentar centrar la anotación en el mapa)

Por ejemplo usando la segunda anotación en una lista hipotética de anotaciones.

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

Su código es una extraña mezcla de ObjC (los corchetes) y Swift. ¿Por qué crear una matriz y luego descartarla? –

Cuestiones relacionadas