Как открыть вызов MKAnnotationView программно? (iPhone, MapKit)

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

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

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

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

2 ответов


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

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

}

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

[mv annotations];

после вычисления ближайшей аннотации вызовите:

[self openAnnotation:closestAnnotation];

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


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

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

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

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

openAnnotation(annotation: mapView.annotations[1])