MKUserTrackingButton не появляется из-за Firebase? - PullRequest
1 голос
/ 11 июля 2019

Я добавил в коде MapView, кнопку MKUserTrackingButton, localManager, DispatchGroup:

let mapView: MKMapView = {
    let mapView = MKMapView()
    mapView.translatesAutoresizingMaskIntoConstraints = false
    return mapView
}()

private var userTrackingButton: MKUserTrackingButton!
private let locationManager = CLLocationManager()
let myGroup = DispatchGroup()
var array = [Car]()

В ViewDidLoad я установил:

myGroup.enter()

Получить данные из Firebase:

observeCars()

Подождите, пока я не получу все данные из Firebase:

    myGroup.notify(queue: DispatchQueue.main) {
        self.view.addSubview(self.mapView)

        //Here code to set the mapView in the view

        self.setupUserTrackingButton()
        self.locationManager.delegate = self
        self.locationManager.requestWhenInUseAuthorization()
        self.locationManager.startUpdatingLocation()
    }

Здесь я установил свою кнопку в представлении:

private func setupUserTrackingButton() {
    mapView.showsUserLocation = true
    userTrackingButton = MKUserTrackingButton(mapView: mapView)
    userTrackingButton.layer.backgroundColor = UIColor(white: 0.5, alpha: 1).cgColor
    userTrackingButton.layer.borderColor = UIColor.white.cgColor
    userTrackingButton.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(userTrackingButton)
    ///Code to set in the view the button
}

Класс, в котором я устанавливаю соединение с Firebase для получения данных:

class APIService: NSObject {
    class func observeCars(completion: ((_ car: Car) -> Void)?) {
    let ref = Database.database().reference()
       ref.child("Cars").observe(.childAdded, with: { (snapshot) in
            if let dictionary = snapshot.value as? [String: Any] {
                let car = Car(dictionary: dictionary)
                completion?(car)
            }
        }, withCancel: nil)
    }

}

Это функция (написанная в MainViewController), где я получаю данные из Firebase и добавляю их в массив:

internal func observeCars() { 
    /////I think this is the part that makes It doesn't appear because 
    if I delete this part, it works like I aspect
    APIService.observeCars {
        (car) in
        self.array.append(car)
        print(self.array.count)
        if self.array.count == totalCars {
            self.myGroup.leave()
        }
    }
     //////////
    }

Есть подсказки? Спасибо

1 Ответ

0 голосов
/ 14 июля 2019

Я добавил кнопку MKUserTracking в mapView:

mapView.addSubview(userLocationButton)

Это работает для меня.

...