Показать текущее местоположение пользователя с MKMapView? - PullRequest
7 голосов
/ 29 марта 2012

Я пытаюсь показать текущее местоположение пользователя, установив свойство MKMapView т.е. setShowsUserLocation в YES.По умолчанию в левом верхнем углу экрана iPhone появляется стрелка, когда приложение начинает обновлять местоположение пользователя. Но после показа текущего местоположения стрелка должна исчезнуть, но она сохраняется, пока приложение работает, что будет означать, что приложение все ещеобновление местоположения в фоновом режиме?так как я могу остановить обновление текущего местоположения?я реализовал делегата, который вызывается немедленно ..

Ответы [ 3 ]

16 голосов
/ 29 марта 2012

Если карта видима и для showUserLocation установлено значение YES, она продолжает обновляться в фоновом режиме.

Вам необходимо отменить это, когда представление исчезает или когда приложение переходит в фоновый режим.Вероятно, наилучшим способом было бы зарегистрировать ваш viewController, чтобы получать уведомления для UIApplicationDidEnterBackgroundNotification и UIApplicationDidBecomeActiveNotification.

- (void)viewDidLoad{
  [super viewDidLoad];
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appToBackground) name:UIApplicationDidEnterBackgroundNotification object:nil];
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appReturnsActive) name:UIApplicationDidBecomeActiveNotification object:nil];
} 

Затем в методе, вызываемом этим уведомлением, измените свойства представления карты в отношении userLocation:

- (void)appToBackground{
  [mapview setShowsUserLocation:NO];
}

И

- (void)appReturnsActive{
  [mapview setShowsUserLocation:YES];
}

Убедитесь, что эти методы действительно вызываются, установив точку останова и вернувшись к начальному экрану.

1 голос
/ 30 октября 2013

Я согласен с Майклом Кернаханом, я почти уверен, что внутри MKMapView.

MKMapView появляется условие гонки, чтобы попытаться удалить userLocationAnnotation (синяя точка) каккак только он осознает, что потерял доступ к службам определения местоположения.

Однако это не выглядит защищенным, и если разработчик также выдает [mapView setShowsUserLocation:NO], очень вероятно, что произойдет сбой из-за гонки между внутренним потоком MKMapView, пытающимся удалить userLocationAnnotation и поток, который вызывает setShowsUserLocation:NO.

0 голосов
/ 29 марта 2012

Остановить обновление местоположения можно, отправив сообщение администратору местоположения [self.locationManager stopUpdatingLocation];

Что касается вашего случая, вы пытались перестать показывать местоположение пользователей?

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