Когда служба определения местоположения устройства отключена, пользователь открывает мое приложение, которое использует iOS Mapbox и Mapbox Navigation SDK.Пользователь не может видеть местоположение своего устройства на карте, потому что служба определения местоположения отключена.Когда пользователь заходит в настройки устройства и включает службу определения местоположения, а затем возвращается в приложение, местоположение пользователя все еще невидимо.Когда я проверяю координату местоположения пользователя по mapView.userLocation.coordinate, я получаю неверную координату.Также приведенный ниже метод делегата не вызывается, даже когда я вызываю locationManager.startUpdatingLocation ():
func mapView(_ mapView: MGLMapView, didUpdate userLocation: MGLUserLocation?)
. Я могу решить эту проблему, удалив старый вид карты и настроив новый вид карты.Это означает, что когда пользователь возвращается в приложение после перехода в «Настройки» и включения службы определения местоположения, мне нужно удалить старый вид карты и настроить другой, чтобы показать местоположение пользователя.Но я не хочу этого делать.
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status == .authorizedWhenInUse || status == .authorizedAlways {
isLocationServicesEnabled = true
if mapView != nil {
mapView.removeFromSuperview()
mapView = nil
}
resetupMapView()
}
}
Как показать местоположение пользователя на карте после включения службы определения местоположения?Можно ли как-нибудь перезагрузить вид карты?
, когда я пытаюсь использовать код, показанный ниже для отображения местоположения пользователя на карте, я получаю сообщение об ошибке с сообщением ниже:
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status == .authorizedWhenInUse || status == .authorizedAlways {
if mapView != nil {
mapView.showsUserLocation = true
}
}
}
Завершение работы приложения из-за необработанного исключения«MGLUserLocationAnnotationTypeException», причина: «Представление аннотации местоположения пользователя должно быть своего рода MGLUserLocationAnnotationView.Я не знаю, почему это так.Я также реализовал метод делегата viewForAnnotation, чтобы показать пользовательское изображение для аннотации.
func mapView(_ mapView: MGLMapView, viewFor annotation: MGLAnnotation) -> MGLAnnotationView? {
let reuseIdentifier = "reusableView"
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseIdentifier)
if annotationView == nil {
annotationView = MGLAnnotationView(reuseIdentifier: reuseIdentifier)
let markerImageView = UIImageView(image: UIImage(named: "Orange"))
markerImageView.frame = CGRect(x: 0, y: 0, width: viewModel.markerImageWidth, height: viewModel.markerImageHeight)
annotationView?.frame = markerImageView.frame
annotationView?.center = markerImageView.center
annotationView?.addSubview(markerImageView)
}
return annotationView
}