Как открыть вызов MKAnnotationView программно? (iPhone, MapKit) - PullRequest
26 голосов
/ 03 февраля 2010

Я хочу открыть вызов для MKPinAnnotationView программно. Например, я бросил на карту 10 булавок и хочу открыть ближайший ко мне. Как бы я поступил так?

Apple указала параметр selected для MKAnnotationView's, но не рекомендует устанавливать его напрямую (это не работает, пробовал).

Для остальных MKAnnotationView имеет только setHighlighted ( тот же рассказ ) и может ShowCallout метод ..

Любые намеки, если это вообще возможно?

Ответы [ 2 ]

78 голосов
/ 26 февраля 2010

В вашем mapViewController создайте метод действия:

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

}

Затем вы можете определить ближайшую аннотацию на основе текущего местоположения и пошаговых аннотаций, доступных в массиве.

[mv annotations];

Один развычисляется ближайшая аннотация, звоните:

[self openAnnotation:closestAnnotation];

MapView должен прокрутиться автоматически, чтобы разместить аннотацию в центре области отображения.

1 голос
/ 23 мая 2017

В swift 3 это обновлено до:

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

и может вызываться с использованием любой аннотации (откроется представление выноски аннотации и будет предпринята попытка центрировать аннотацию на карте)

Например, использование второй аннотации в гипотетическом списке аннотаций.

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