MapKit showUserLocation не показывает синий маркер местоположения - PullRequest
0 голосов
/ 24 апреля 2020

Я настроил пользовательский mapView и отображаю его в полноэкранном режиме на моем контроллере вида. Когда mapView инициализируется, он проверяет авторизацию местоположения и, если ему предоставляется, поворачивается showsUserLocation = true

. Я могу указать в своей консоли, что этот флаг установлен после авторизации и имеет значение true, и mapView запустит мой centerViewOnUserLocation ( ), но я все еще не вижу синюю точку на карте для определения местоположения. Я тестирую на своем iPhone, а не на симуляторе. Вот несколько примеров кода:

View Controller

    private lazy var mapView: EVMapView = {
        let result: EVMapView = EVMapView()
        view.addSubview(result)
        result.delegate = self
        EVConstraintHelper.anchor(view: result, options: .classic)
        return result
    }()

Настраиваемый MapView

class EVMapView: MKMapView, EVLocationProtocol {
    var locationManager: CLLocationManager?

    init() {
        super.init(frame: .zero)
        checkLocationServices()
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func checkLocationServices() {
        if CLLocationManager.locationServicesEnabled() {
            setupLocationManager()
            checkLocationAuth()
        } else {
            print("Auth Denied")
        }
    }

    func setupLocationManager() {
        locationManager = CLLocationManager()
        locationManager?.delegate = self
        locationManager?.desiredAccuracy = kCLLocationAccuracyBest
    }

    func checkLocationAuth() {
        switch CLLocationManager.authorizationStatus() {
        case .authorizedWhenInUse, .authorizedAlways:
            showsUserLocation = true
            centerViewOnUserLocation()
        case .denied:
            print("Auth Denied")
        case .notDetermined:
            locationManager?.requestWhenInUseAuthorization()
        case .restricted:
            print("Auth Restricted")
        @unknown default:
            print("Unkown default selected in \(#function)")
        }
    }

    func centerViewOnUserLocation() {
        guard let coordinate = locationManager?.location?.coordinate else { return }
        let span = MKCoordinateSpan.init(latitudeDelta: 2, longitudeDelta: 2)
        let region = MKCoordinateRegion.init(center: coordinate, span: span)
        setRegion(region, animated: true)
    }
}

У меня есть настройка plist Конфиденциальность - Местоположение при использовании Описание использования сообщений и я не уверен, что еще это будет.

1 Ответ

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

Я понял это ... Я использовал пользовательские аннотации меток для mapView, которые удалили аннотации по умолчанию. Технически синий маркер текущего местоположения является аннотацией по умолчанию, поэтому он также был удален.

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