Как программно выбрать MKUserLocation? - PullRequest
3 голосов
/ 11 января 2012

Заголовки и субтитры могут быть добавлены в местоположение пользователя, которое iOS показывает, используя MKUserLocation . Когда пользователь нажимает на местоположение, они будут отображаться в виде пузырька над местоположением. Мысли пузыри для других аннотаций можно показать, выбрав аннотацию с setSelected:animated: из MKAnnotationView. К сожалению, MKUserLocation не происходит от MKAnnotationView.

Как программно выбрать местоположение пользователя, чтобы над местоположением пользователя появлялась аннотация, без предварительного нажатия пользователем на нее?

1 Ответ

7 голосов
/ 11 января 2012

Документация для MKAnnotationView говорит о его методе setSelected:animated: (и о чем-то похожем для его свойства selected):

Вы не должны вызывать этот метод напрямую.


Вместо этого используйте метод MKMapView selectAnnotation:animated:.Если вы вызываете его в методе делегата didAddAnnotationViews, вы можете быть уверены, что представление аннотации готово для отображения выноски, в противном случае вызов selectAnnotation ничего не сделает.

Например:

-(void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
    for (MKAnnotationView *av in views)
    {
        if ([av.annotation isKindOfClass:[MKUserLocation class]])
        {
            [mapView selectAnnotation:av.annotation animated:NO];
            //Setting animated to YES for the user location 
            //gives strange results so setting it to NO.
            return;
        }
    }
}
...