Я добавил экземпляр MKUserTrackingBarButtonItem в контроллер представления viewDidLoad
следующим образом:
MKUserTrackingBarButtonItem *userTrackingButton = [[MKUserTrackingBarButtonItem alloc] initWithMapView:self->mapView];
NSMutableArray *toolbarItems = [[NSMutableArray alloc] initWithArray:[mapToolBar items]];
[toolbarItems insertObject:userTrackingButton atIndex:0];
[mapToolBar setItems:toolbarItems];
Службы геолокации включены в настройках, но не для приложения. При нажатии кнопки MKUserTrackingBarButtonItem модальное диалоговое окно спрашивает пользователя, разрешить ли приложению использовать текущее местоположение. Когда выбрано «Не разрешать», MKUserTrackingBarButtonItem превращается в вращающийся значок серого пунктира, а исходный значок компаса не восстанавливается.
Как мне восстановить состояние кнопки, как это делается в приложении «Карты»?
Желаемое поведение такое же, как в приложении «Карты».
- Убедитесь, что службы геолокации включены в меню «Настройки» > «Конфиденциальность» > «Службы геолокации».
- Сбросьте местоположение и конфиденциальность в меню «Настройки» > «Основные» > «Сброс» > «Сбросить местоположение и конфиденциальность».
- Запустите приложение «Карты».
- Коснитесь значка компаса в левом нижнем углу.
- Появится диалоговое окно с сообщением «Карты хотят использовать ваше текущее местоположение». В этот момент значок компаса превратился в серую пунктирную вращающуюся иконку.
- Выберите «Не разрешать».
Первоначальный значок компаса восстановлен.
Я тестирую это на iPhone, а не на симуляторе. Приведенный выше код работает без проблем, когда службы определения местоположения включены и приложению разрешено использовать текущее местоположение.