ios - 两个函数在 Swift 中调用

标签 ios swift google-maps google-cloud-firestore

Firestore 数据库获取位置后,我使用 GoogleMaps 在屏幕上显示位置标记,但问题是我有三个函数。

第一个函数是显示谷歌地图上的所有用户列表,我在 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!)")
            }
}

我使用委托(delegate)方法来传递选定的用户信息。

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 函数对于上述两个函数来说是相同的,并且它在 map 上显示两个函数的标记。但我只想在 map 上显示选定的用户信息。红色标记显示所选的用户位置。我怎样才能做到这一点?

enter image description here

最佳答案

只需放置一个 bool 标志,当您选择用户时将其设置为 true 并在委托(delegate)中检查它并清除 map 叠加层并仅放置您的标记

关于ios - 两个函数在 Swift 中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54361022/

相关文章:

iphone - 设置UITableView右侧显示的SectionIndex的宽度?

php - 使用 ASIHTTPRequest iPhone 上传的 JPEG 图像方向

swift - UIPopoverController(快速)

swift - 如何获取 AudioComponent 的 Description Type 字母代码?

android - Google Map v2 检查该点是否包含在区域内

mysql - 实现地理空间/邻近搜索需要什么?

iphone - 在 iOS 中有自定义键盘实现的好教程吗?

ios - Post 方法不在 api 调用中发送我的数据

ios - 如何使用自定义设计显示一串数字?

android - Google map View 泄漏严重