Как отображать местоположение пользователя в MapKit?

голоса
3

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

- (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, все работает нормально, но, конечно, я не вижу местоположение пользователя.

Задан 14/03/2010 в 20:02
источник пользователем
На других языках...                            


3 ответов

голоса
15

Когда 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.

Ответил 16/03/2010 в 10:05
источник пользователем

голоса
8

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

mapView.showsUserLocation = YES;

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

Ответил 14/03/2010 в 20:07
источник пользователем

голоса
0

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

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
}
Ответил 05/05/2011 в 00:49
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more