Как отобразить местоположение пользователя в mapkit? - PullRequest
3 голосов
/ 14 марта 2010

Я хотел бы отобразить синюю пульсирующую точку для местоположения пользователя. Я делаю это:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation    *)newLocation fromLocation:(CLLocation *)oldLocation{
//some other stuff here
[self.mapView setShowsUserLocation:YES];
}

Но я в итоге получаю

-[MKUserLocation establishment]: unrecognized selector sent to instance 0x125e90

Должен ли я сделать это как-нибудь по-другому?

- РЕДАКТИРОВАТЬ -

Я тоже так делаю, и вот где я в итоге получаю вышеприведенное исключение:

- (MKAnnotationView *) mapView:(MKMapView *)_mapView viewForAnnotation:(AddressNote *) annotation{

if(annotation.establishment != nil){
//do something}

Учреждение - это пользовательский класс, который у меня есть в AddressNote. Когда учреждение имеет значение, возникает исключение. Если я не установил ShowsUserLocation, все работает нормально, но, конечно, я не вижу местоположение пользователя.

Ответы [ 3 ]

15 голосов
/ 16 марта 2010

Когда запрашивается viewForAnnotation, вам нужно проверить, не соответствует ли данная аннотация текущему местоположению пользователя. Если да, верните ноль, в противном случае верните свой обычный annoationView. - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation { if (annotation==self.mapView.userLocation) return nil; //then the rest of your code for all your 'classic' annotations.

[EDIT] альтернативный способ - проверить тип класса аннотации:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation { if ([annotation isKindOfClass:[MKUserLocation class]]) return nil; //then the rest of your code for all your 'classic' annotations.

8 голосов
/ 14 марта 2010

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

mapView.showsUserLocation = YES;

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

0 голосов
/ 05 мая 2011

Вы используете неправильный метод делегата. Для просмотра карты вы должны использовать этот метод делегата для определения местоположения пользователя:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...