Итак, чтобы использовать уникальный CLLocateManager, вы можете создать класс, который будет делегатом для всех ваших карт. Поэтому вместо выполнения:
self.locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
Сделайте что-то вроде:
self.locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = mySharedDelegate;
Где mySharedDelegate - это ваш класс со всеми методами делегата CLLocationManager.
Вы можете получить действительную координату для userLocation только после первого вызова
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
Когда вызывается этот метод, это потому, что GPS нашел новое местоположение, и поэтому синяя точка будет перемещена туда, а у userLocation будет новая координата.
Используйте следующий метод в делегате CLLocationManager, чтобы зарегистрировать текущее местоположение, когда оно будет найдено:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
NSLog(@"---------- locationManager didUpdateToLocation");
location=newLocation.coordinate;
NSLog(@"Location after calibration, user location (%f, %f)", _mapView.userLocation.coordinate.latitude, _mapView.userLocation.coordinate.longitude);
}
У вас есть идея?
Приветствия,
VFN