В iOS, используя Swift, я хочу показать местоположение пользователя, но синяя точка не отображается в MapView. - PullRequest
0 голосов
/ 06 октября 2018

Синяя точка не отображается на карте.Похоже, что между менеджером CLLocation и значением self.mapView.userLocation.coordinate имеется некоторое разъединение.

Менеджер CLLocation правильно возвращает координаты Apple Campus, но значение mapView.userLocation.coordinate возвращает 0,0 дляи широта и долгота.

Я отлаживал это часами.

Дополнительная информация ниже:

В viewDidAppear и viewDidLoad я распечатал текущее местоположение пользователя на консоли следующим образом:

print(self.mapView.userLocation.coordinate)

Этовывод, отображаемый в консоли:

CLLocationCoordinate2D (широта: 0.0, долгота: 0.0)

Вот как выглядит мой MapViewController:

import UIKit
import CoreLocation
import MapKit

class MapViewController: UIViewController, MKMapViewDelegate {

@IBOutlet weak var mapView: MKMapView!
var manager: CLLocationManager? = CLLocationManager()

override func viewDidLoad() {
    super.viewDidLoad()

    // map stuff
    manager?.delegate = self
    manager?.desiredAccuracy = kCLLocationAccuracyBest
    self.mapView.delegate = self

    // print user's current location to console
    print("user location in view did load:")
    print(self.mapView.userLocation.coordinate)

}

override func viewDidAppear(_ animated: Bool) {
    manager?.requestAlwaysAuthorization()
    manager?.startUpdatingLocation()

    self.mapView.showsUserLocation = true
    self.mapView.userTrackingMode = .follow

    // print user's current location to console
    print("user location in view did appear:")
    print(self.mapView.userLocation.coordinate)

    animateMapToUserLocation()
}

}

Примечания:

  1. Я добавил соответствующие сообщения о конфиденциальности в файл Info.plist.

  2. MapView в раскадровке соединен сплошным кружком с правильным ViewController.

  3. MapViewController создается следующим образом:

    let storyboard = UIStoryboard (имя: "Main", комплект: Bundle.main) let mapVC = storyboard.instantiateViewController (withIdentifier: "MapVC") как?MapViewController self.present (mapVC !, анимация: true, завершение: ноль)

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Мой поток управления был отключен.Карта будет отображаться до того, как приложение получит разрешение на поиск местоположения пользователя.Сейчас работает.

0 голосов
/ 06 октября 2018

Вы реализовали функцию viewForAnnotation?Вы проверяете, что не рисуете (или не рисуете) другой тип булавки для MKUserLocation?

например,

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    if annotation is MKUserLocation {
        return nil
    }
    ...
}

Проверьте также Настройки> Конфиденциальность> Службы определения местоположения> Вашприложение

enter image description here

...