MapView вернуться к аннотации текущего местоположения? - PullRequest
0 голосов
/ 18 января 2012

Я прошу мой MapView показать текущее местоположение пользователя, который я получил из CLLocationManager, используя делегат startUpdatingLocation, а также я добавляю в MapView некоторые аннотации, но проблема в том, когда прокручивают карту, чтобы показать некоторые аннотациикарта возврата к аннотации текущего пользователя

- (void)viewDidLoad
{
     [super viewDidLoad];

     // Get the location if the user
     _locationManager = [[CLLocationManager alloc] init];

     if ([CLLocationManager locationServicesEnabled]) 
     {
        _locationManager.delegate = self;
        [_locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
        [_locationManager startUpdatingLocation];
     }
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
      // set the map view to the current location
      MKCoordinateSpan span;
      span.latitudeDelta = 0.01;
      span.longitudeDelta = 0.05;

      MKCoordinateRegion region;
      region.span = span;
      region.center = _locationManager.location.coordinate;

      [self.mapView setRegion:region animated:YES];
}

Ответы [ 2 ]

1 голос
/ 18 января 2012

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

Поскольку вы устанавливаете регион карты в этом методе делегата безоговорочно,карта всегда будет перемещаться назад к местоположению пользователя, когда она получает обновление, даже после того, как пользователь или приложение панорамировали или масштабировали карту где-то еще.

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

Другой вариант - проверить различные свойства location, такие как timestamp или horizontalAccuracy, и вернуться только кместоположение пользователя, если эти значения находятся на определенном пороге.

0 голосов
/ 18 января 2012

Вы должны вызвать следующий метод [_locationManager stopUpdatingLocation];, например: -

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
      [_locationManager stopUpdatingLocation];

      // set the map view to the current location
      MKCoordinateSpan span;
      span.latitudeDelta = 0.01;
      span.longitudeDelta = 0.05;

      MKCoordinateRegion region;
      region.span = span;
      region.center = _locationManager.location.coordinate;

      [self.mapView setRegion:region animated:YES];
}

потому что, как только вы начинаете обновлять location ... она каждый раз вызывает вышеуказанную функцию ... поэтому после вызова этой функции вам нужно прекратить вызывать эту функцию, вызывая метод [_locationManager stopUpdatingLocation];.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...