Две функции вызывают в Swift - PullRequest
0 голосов
/ 25 января 2019

Я использую GoogleMaps для отображения маркера местоположения на экранах после извлечения местоположения из базы данных Firestore, но проблема в том, что у меня есть три функции.

Первая функция показывает весь список пользователей на картах Google, я назвал его методом viewDidLoad().

func showListOfAllUsers() {

for document in snapshot!.documents {
                print(document.data())
                let marker = GMSMarker()

                self.location.append(Location(trackingData: document.data()))

                print(self.location)

                 guard let latitude = document.data()["Latitude"] as? Double else { return }
                 guard let longitude = document.data()["longitude"] as? Double else { return }

                marker.position = CLLocationCoordinate2D(latitude: latitude as! CLLocationDegrees , longitude: longitude as! CLLocationDegrees)
                marker.map = self.mapView
                marker.userData = self.location
                marker.icon = UIImage(named: "marker")
                bounds = bounds.includingCoordinate(marker.position)
                print("Data stored in marker \(marker.userData!)")
            }
 }

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

func getAllLocationOfSelectedUserFromFirestore() {
for document in snapshot!.documents {
                print(document.data())
                let marker = GMSMarker()

                self.location.append(Location(trackingData: document.data()))

                print(self.location)

                 guard let latitude = document.data()["Latitude"] as? Double else { return }
                 guard let longitude = document.data()["longitude"] as? Double else { return }

                marker.position = CLLocationCoordinate2D(latitude: latitude as! CLLocationDegrees , longitude: longitude as! CLLocationDegrees)
                marker.map = self.mapView
                marker.userData = self.location
                bounds = bounds.includingCoordinate(marker.position)
                print("Data stored in marker \(marker.userData!)")
            }
}

Я использовал метод делегата для передачи информации о выбранном пользователе.

extension MapViewController: ShowTrackingSalesMenListVCDelegate {

func didSelectedFilters(_ sender: ShowTrackingSalesMenListViewController, with userID: String) {
    self.selectedUserID = userID
    self.userLogButton.isHidden = false
    print("The selected UserID is \(selectedUserID)")
    self.getAllLocationOfSelectedUserFromFirestore()  // called here the second function
}

Вот функция GMSMapViewDelegate, в которой я передаю пользовательскую информацию в userData .

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
    print("didTap marker")
    self.view.endEditing(true)
    self.mapView.endEditing(true)
    if let _ = self.activeMarker {
        self.infoWindowView.removeFromSuperview()
        self.activeMarker = nil
    }

    self.infoWindowView = MarkerInfoView()
    let point = mapView.projection.point(for: marker.position)
    self.infoWindowView.frame = CGRect(x: (point.x-(self.infoWindowView.width/2.0)), y: (point.y-(self.infoWindowView.height+25.0)), width: self.infoWindowView.width, height: self.infoWindowView.height)
    self.activeMarker = marker

    for mark in location {
        self.infoWindowView.storeNameLabel?.text = mark.name
    }
    print(self.infoWindowView.storeNameLabel?.text as Any)
    if let data = marker.userData as? [String:Any] {
        print(data)
        self.storeMapData = data
        print(self.storeMapData)

        var name = "N/A"
        if let obj = data["name"] as? String {
            name = obj
        }


    } else {

    }
    infoWindowView.delegate = self
    self.mapView.addSubview(self.infoWindowView)

    return true
}

Показывает маркер выбранного пользователя на GoogleMaps. Теперь проблема в том, что функция GMSMapViewDelegate одинакова для обеих вышеупомянутых функций, и она показывает маркеры обеих функций на карте. Но я хочу показать только выбранную информацию пользователя на Картах. Красный маркер, показывающий выбранные местоположения пользователя. Как я могу это сделать?

enter image description here

1 Ответ

0 голосов
/ 25 января 2019

Просто установите логический флаг, и когда вы выбираете пользователя, установите для него значение true, отметьте его в делегате и снимите пометку с карты и поместите только маркер

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