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, то вы не увидите синюю точку. У меня была точно такая же проблема, и когда я начал пробовать свое программное обеспечение на реальном оборудовании, появилась голубая точка!