6

Если я хочу показать userLocation на карте и в то же время записать местоположение пользователя, рекомендуется добавить наблюдателя в userLocation.location и записать местоположения, ИЛИ я все еще использую CLLocationManager для записи местоположения пользователя и использую mapView.showUserLocation, чтобы показать текущее местоположение пользователя (синий индикатор)? Я хочу показать синий индикатор по умолчанию, поддерживаемый API MapKit.Разработка iPhone - CLLocationManager против MapKit

Кроме того, здесь грубый пример кода:

- (void)viewDidLoad { 
    ... 

    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    locationManager.distanceFilter = DISTANCE_FILTER_VALUE; 
    locationManager.delegate = self; 
    [locationManager startUpdatingLocation]; 

    myMapView.showUserLocation = YES; 
    [myMapView addObserver:self forKeyPath:@"userLocation.location" options:0 context:nil]; 

    ... 
} 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    // Record the location information 
    // ... 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    NSLog(@"%s begins.", __FUNCTION__); 

    // Make sure that the location returned has the desired accuracy 
    if (newLocation.horizontalAccuracy <= manager.desiredAccuracy) 
     return; 

    // Record the location information 
    // ... 
} 

Под капотом, я думаю, что MKMapView также использует CLLocationManager, чтобы получить текущее местоположение пользователя? Таким образом, это создаст какие-либо проблемы, потому что я считаю, что CLLocationManager и MapView будут пытаться использовать одни и те же услуги определения местоположения? Будут ли какие-либо конфликты и отсутствие точных/требуемых или текущих данных?

ответ

1

См. Это SO entry: CLLocationManager использует те же данные во всех своих экземплярах, поэтому конфликтов нет.

+1

Но если мы установим showUserLocation в TRUE и создадим CLLocationManager в нашем пользовательском классе, мы по существу создадим два экземпляра CLLocationManager - один из которых используется MKMapView и один в вашем пользовательском классе. Кто получит обновления местоположения? Наблюдатель на userLocation.location или метод didUpdateLocation: delegate? Если я начну записывать места в обоих из них, будут ли синхронизированы записанные местоположения? – Mustafa

+2

Очевидно, у вас может быть несколько менеджеров местоположения, и они предоставят вам точную информацию. Хотя MapKit также использует CLLocationManager под капотом, создание CLLocationManager и использование его с MapKit не приведет к конфликтам. – Mustafa

Смежные вопросы