showsUserLocation не отображает синюю точку в iPhone 4.0

Итак, я создал CLLocationManager, вызвал его для начала обновления, установил для mapView.showsUserLocation значение YES и возвратил nil для аннотации userLocation. Вот некоторые фрагменты из моего кода в моем UIMapViewController:

- (void)viewDidLoad
{
     CLLocationManager *locationManager = [[CLLocationManager alloc] init];
     [locationManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{ 
 CLLocationCoordinate2D userCoordinate = locationManager.location.coordinate;
 [map setCenterCoordinate:userCoordinate animated:YES];
 [map setShowsUserLocation:YES];  
}

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{

 MKAnnotationView *mapIconView = (MKAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:@"mapIconView"];

 // Don't mess with the user location annotation
     if (annotation == mapView.userLocation)
              return nil;

    // etc.
}     

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

mapView.setUserLocation = YES;

Что мне здесь не хватает?

5 ответов

Убедитесь, что вы нигде не удаляете все аннотации с карты:

например, [mapView removeAnnotations:mapView.annotations]

Когда я делаю это, а не проверяю annotation как и у вас, я делаю что-то вроде:

if([annotation class] == MKUserLocation.class) {
    return nil;
}

Это mapView.showUserLocation = YES;

Вы, кажется, использовали неправильное выражение "set" вместо "show".

И, к вашему сведению, вам не нужно связываться с менеджером локаций только для того, чтобы узнать местоположение пользователя. Corelocation автоматически срабатывает при установке mapview.showUserLoction = YES и загрузите карту.

Надеюсь, поможет:)

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

Как и в случае с моей проблемой, ваш код выглядит так, как будто он обрабатывает обновления местоположения и просит MKMapView отслеживать местоположение пользователя. Обратите внимание, что в симуляторе это два разных места! Когда MKMapView отслеживает местоположение пользователя в симуляторе, он дает вам местоположение Apple в Купертино, штат Калифорния, независимо от вашего "фактического" местоположения.

Используя этот код и позволяя MKMapView отслеживать местоположение вашего делегата, вместо того, чтобы самостоятельно отслеживать местоположение, вы можете увидеть синюю точку:

- (void)mapView:(MKMapView *)theMapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    [theMapView setCenterCoordinate:userLocation.location.coordinate animated:YES];
}

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

Если вы используете симулятор iOS, то вы не увидите синюю точку. У меня была точно такая же проблема, и когда я начал пробовать свое программное обеспечение на реальном оборудовании, появилась голубая точка!

Другие вопросы по тегам