¿Cómo abrir la llamada MKAnnotationView programáticamente? (iPhone, MapKit)


Quiero abrir la llamada para un MKPinAnnotationView mediante programación. Por ejemplo, dejo caer 10 pines en el mapa, y quiero abrir el más cercano a mí. ¿Cómo podría hacer esto?

Apple ha especificado el parámetro 'selected' para MKAnnotationView's, pero desaconseja configurarlo directamente (esto no funciona, lo probé).

Para el resto MKAnnotationView solo tiene un setHighlighted ( la misma historia), y puede ShowCallout método..

¿Alguna pista si esto es posible?

Author: NANNAV, 2010-02-03

2 answers

En su MapViewController cree un método de acción:

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

}

Luego puede determinar la anotación más cercana en función de la ubicación actual y recorrer las anotaciones disponibles en la matriz.

[mv annotations];

Una vez calculada la anotación más cercana, llame a:

[self openAnnotation:closestAnnotation];

El MapView debe desplazarse automáticamente para colocar su anotación en el centro del área de visualización.

 77
Author: Chip Coons,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-13 05:37:59

En swift 3 esto se actualiza a:

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

Y se puede llamar usando cualquier anotación (esto abrirá la vista de llamada de anotación 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])
 1
Author: S. Doe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 16:14:04