Подтвердить что ты не робот

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

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

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

В остальном MKAnnotationView имеет только setHighlighted (ту же историю) и может ShowCallout метод.

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

4b9b3361

Ответ 1

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

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

}

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

[mv annotations];

После вычисления самой близкой аннотации вызовите:

[self openAnnotation:closestAnnotation];

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

Ответ 2

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

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

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

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

openAnnotation(annotation: mapView.annotations[1])