showsUserLocation не отображает синюю точку в iPhone 4.0 - PullRequest
1 голос
/ 24 августа 2010

Итак, я создал 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 ]

1 голос
/ 19 июня 2013

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

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

1 голос
/ 09 января 2011

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

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

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

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

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

1 голос
/ 01 октября 2010

Это mapView.showUserLocation = YES;

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

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

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

1 голос
/ 24 августа 2010

Когда я делаю это, вместо того чтобы проверять annotation, как у вас, я делаю что-то вроде:

if([annotation class] == MKUserLocation.class) {
    return nil;
}
0 голосов
/ 26 декабря 2010

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

...