Приложение для iphone: вопросы о взаимодействии между CLLocationmanager и MKMapView (показывая текущее местоположение пользователя) - PullRequest
5 голосов
/ 04 июня 2011

В моем приложении для iPhone у меня есть следующая логика:

  1. Запустить CLLocationManger (пользователь может предоставить параметры точности и фильтры расстояния в locationmanager, поскольку в моем случае лучшая точность не требуется100-300 метров подойдут, и я бы хотел сэкономить на этом батарею.

  2. После того, как LocationManager получит исправление GPS (и только если оно получено),Я создаю и отображаю карту.И CLLocationManager, и MKmapView являются частью одного и того же ViewController.Чтобы показать текущее местоположение, я установил mapView.showsUserLocation: YES, чтобы отобразить синюю точку.LocationManager, который я запустил, все еще продолжает работать, получая обновления GPS.

В документации Apple об этом говорится в MKMapView showsUserLocation:

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

Нет слов о том, какую точность или фильтр расстояний он использует для текущего местоположения MKMapView.Мне кажется, что на данный момент у меня есть и locationManager, который я запустил сам, и собственный mapVanager mapView, который обновляет местоположения!

Помните, я хотел сэкономить заряд батареи, установив фильтр точности и расстояния?Будут ли эти параметры соблюдаться в locationManager mapView?

Кроме того, эти два менеджера местоположения будут синхронизированы один с другим?Я обновляю карту, чтобы отцентрировать ее с новыми GPS-координатами, которые получает мое первоначальное местоположениеManager.Но я также хочу, чтобы синяя точка была видна в центре карты.Будет ли оно также обновляться каждый раз, так как у showView пользователя mapView установлено значение TRUE?

Буду признателен всем, кто знает об этом.

1 Ответ

10 голосов
/ 09 июня 2011

Насколько я понимаю (основываясь на том, что я вижу, а не на документации, потому что мне кажется, что я не могу найти ничего, что покрывает это), свойство showsUserLocation заставляет mapView запускать экземпляр CLLocationManager с использованием настроек максимальной точности(Фильтр расстояния 1 м, наилучшая точность), а затем обновите свой вид аннотации синего круга, когда диспетчер местоположений возвращает обновления.Он также обновляет круговое наложение на основе горизонтальной точности обновлений местоположения.Я считаю, что этот экземпляр CLLocationManager отличается от любого, который вы можете запустить самостоятельно, потому что я также запускаю CLLocationManager параллельно и не вижу никаких помех от обновлений текущего местоположения вида карты.

Поэтому, если вы не хотите, чтобы MKMapView запускал собственный экземпляр высокоточного диспетчера местоположений, отключите showsUserLocation и создайте и вручную обновите ваше текущее местоположение MKAnnotationView на основе вашего CLLocationManager обновления местоположения.Вы также можете увеличить новые обновления, если это применимо.

Я знаю, что это по сути заново изобретает колесо, но я считаю, что это единственный способ получить желаемую функциональность на основе инструментов, предоставленных Apple.Если кто-то знает иначе, пожалуйста, присоединяйтесь, потому что мне тоже будет интересно.

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