Разработка для iPhone — CLLocationManager vs.MapKit
-
25-09-2019 - |
Вопрос
Если я хочу показать userLocation на карте и в то же время записать местоположение пользователя, стоит ли добавить наблюдателя в userLocation.location и записать местоположения, ИЛИ мне следует по-прежнему использовать CLLocationManager для записи местоположения пользователя и использовать mapView.showUserLocation, чтобы показать текущее местоположение пользователя (синий индикатор)?Я хочу показать синий индикатор по умолчанию, поддерживаемый API 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 попытаются использовать одни и те же службы определения местоположения?Будут ли какие-либо конфликты и отсутствие точных/обязательных или актуальных данных?
Решение
Видеть это ТАК запись:CLLocationManager использует одни и те же данные во всех своих экземплярах, поэтому конфликтов нет.