Подтвердить что ты не робот

MKMapView и CLLocationManager

Я хочу использовать MKMapView для отображения текущего местоположения пользователя с помощью синего булавки по умолчанию, и я хочу записать движение пользователя в одно и то же время. Есть ли способ, которым я мог бы использовать диспетчер GPS (не уверен, что это CLLocationManager), MKMapView использует, когда мы разрешили ему показывать местоположение пользователя?

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

Я уже безуспешно исследовал следующие идеи:

  • Используйте [MKMapView showUserLocation:YES] и добавьте KVO в поле userLocation. Это не работает, и мне интересно, связано ли это с тем, что поле userLocation доступно только для чтения.
  • Используйте [MKMapView showUserLocation:YES], создайте MKMapViewDelegate и добавьте отслеживание, когда запрашивается аннотация для местоположения пользователя. Это не работает, потому что просмотр аннотации, по-видимому, запрашивается только один раз.
  • Используйте CLLocationManager и попытайтесь добавить синий контакт вручную. К сожалению, я не нашел синий штырь в доступных типах контактов, поэтому я попытался создать аннотацию пользователя вручную без успеха.

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

4b9b3361

Ответ 1

CLLocationManager использует одни и те же данные во всех своих экземплярах. MKMapView использует CLLocationManager's данные внутренне. Тем не менее решение сделать то, что вы хотите сделать, это позволить MKMapView сделать свое дело в отношении showUserLocation:. В то же время создайте экземпляр CLLocationManager и его делегата.

Сообщения делегата предоставят вам координату GPS-координаты синего булавки MKMapView's. Все будет синхронизировано друг с другом.