MKMapView и CLLocationManager
-
22-09-2019 - |
Вопрос
Я хочу использовать MKMapView для отображения текущего местоположения пользователя с использованием синего штифта по умолчанию, и я хочу одновременно записывать движение пользователя.Есть ли способ использовать менеджер GPS (не уверен, что это CLLocationManager), который MKMapView использует, когда мы включили его, чтобы показывать местоположение пользователя?
Я знаю, что могу создать свой собственный CLLocationManager.Но это похоже на добавление дополнительных ресурсов в мое приложение, и мне бы хотелось, чтобы карта и мое отслеживание оставались синхронизированными.
Я уже безуспешно исследовал следующие идеи:
- Использовать
[MKMapView showUserLocation:YES]
и добавьте KVO наuserLocation
поле.Это не работает, и мне интересно, связано ли это с тем, чтоuserLocation
поле доступно только для чтения. - Использовать
[MKMapView showUserLocation:YES]
, создатьMKMapViewDelegate
и добавьте отслеживание, когда запрашивается представление аннотаций для местоположения пользователя.Это не работает, потому что просмотр аннотации видимо запрашивается только один раз??? - Использовать
CLLocationManager
и попробуйте добавить синюю булавку вручную.К сожалению, я не нашел синюю булавку среди доступных типов булавок, поэтому безуспешно пытался создать пользовательскую аннотацию вручную.
Есть ли у кого-нибудь идеи, как я могу добиться этого и при этом получить выгоду от синей булавки, или это мое единственное решение - использовать CLLocationManager
и создать свой собственный пин-код?
Решение
CLLocationManager
использует одни и те же данные во всех своих экземплярах. MKMapView
использует CLLocationManager's
данные внутри.Тем не менее, решение делать то, что вы хотите, - это позволить MKMapView
делать свое дело в отношении showUserLocation:
.В то же время создайте экземпляр CLLocationManager
и его представитель.
Сообщения делегатов дадут вам GPS-координаты местоположения MKMapView's
синяя булавка.Все будет синхронизировано друг с другом.