mapKit Apple: ошибка с названиями мест и отсутствием карты фокуса на пользователе - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь go из VC1 на VC2 с картой по кнопке 1 через segue, и он должен сфокусировать булавку на моем местоположении в центре карты, и это имеет ошибку. он не фокусируется на пользователе, но если я нажимаю кнопку 2, go назад и нажимаю кнопку 1, он фокусируется на пользователе. И я не могу понять, где мне нужно это исправить.

И последний баг: если я установил огромное значение regionInMeters, например, на 10000 м, и я увеличу масштаб, он покажет названия мест, улиц с ошибкой (изображение) в обоих случаях, когда я пытаюсь использовать этот метод с пользователем. Если я установлю низкое значение - 500, в этих случаях будет показано правильное закрытие, но только местоположение вокруг пользователя, если я переключусь туда в другой город и увеличу масштаб, у него все равно будет эта ошибка. И та же история с акцентом на месте. На огромной высоте - названия стран, городов, рек верны везде enter image description here.

let annotationIdentifire = "annotationIdentifire"
let locationManager = CLLocationManager()
let regionInMeters = 500.00
var incomeSegueIdentifire = ""
override func viewDidLoad() {
    super.viewDidLoad()

    addressLabel.text = ""
    mapView.delegate = self
    setupMapView()
    checkLocationServices()
} 
private func checkLocationServices(){

    if CLLocationManager.locationServicesEnabled() {
        setupLocationManager()
        checkLocationAuthorization()
} else{...}
private func checkLocationAuthorization() {
    switch CLLocationManager.authorizationStatus() {
    case .authorizedWhenInUse:
        mapView.showsUserLocation = true
        if incomeSegueIdentifire == "getAddress" { showUserLocation() }
        break
//other cases
}

Также у меня есть еще одна кнопка2 с переходом на VC1, которая открывает VC2 с картой и фокусируется на место, с адресом, который я установил, и в этом случае у меня есть button3 на карте, которая фокусируется на мне правильно:

  @IBAction func centerViewInUserLocation() {
    showUserLocation()
}

Есть метод, который я использую, чтобы сосредоточиться на пользователе.

private func showUserLocation() {
    if let location = locationManager.location?.coordinate {
        let region = MKCoordinateRegion(center: location,
                                        latitudinalMeters: regionInMeters,
                                        longitudinalMeters: regionInMeters)
        mapView.setRegion(region, animated: true)
    }
}

Значение доходаSegueIdentifire, которое я установил в другом классе

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
         guard let identifire = segue.identifier, let mapVC = segue.destination as? MapViewController else { return }
    mapVC.incomeSegueIdentifire = identifire
}

1 Ответ

0 голосов
/ 24 апреля 2020

Я не знаю, как исправить ошибку с названиями мест, но я исправил основную ошибку (когда открываешь карту по ходу, она должна фокусироваться на пользователе, но это не так).

Я получаю ошибку: не удалось получить информацию о регионе. И пытался найти ответ по этому делу, но не нашел. Нашел пару случаев с ответами об этой ошибке и там сказал, что код в порядке, но все же ошибка, и главный ответ / совет - попробуйте запустить его на вашем реальном устройстве, может быть, это правильно, у меня нет iphone / ipad , Но для симулятора я исправил это, вызвав этот метод асинхронно с задержкой, и он работает для меня)

private func checkLocationAuthorization() {
    switch CLLocationManager.authorizationStatus() {
    case .authorizedWhenInUse:
        mapView.showsUserLocation = true
        if incomeSegueIdentifire == "getAddress" { DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
            self.showUserLocation()
            }
        }
        //other cases
    }
}

Но все же, если у вас есть какие-либо идеи по этим вопросам, я буду рад узнать))

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