按钮显示GMSMarkers但不隐藏它,我如何让它同时执行

问题描述 投票:0回答:1

我创建一个显示不同位置的应用程序。当前按下按钮时,地图上会弹出汽车位置,但是如果再次按下相同的按钮,我想隐藏那些显示的标记。

这是从firebase获取数据库快照的函数,然后将GMSMarker插入到该位置。

 func showCarIcon() {

    ref = Database.database().reference()

    ref.child("location").observe(.childAdded) { (snapshot:DataSnapshot) in
        if let dict = snapshot.value as? [String:AnyObject] {
            if dict["Activity"] as! String == "Car" {
            let longitude = dict["Longitude"] as! String
            let lattitude = dict["Lattitude"] as! String
            let title = dict["Title"] as! String
                self.carIconArray.insert(coordinate(carLat: lattitude, carLng: longitude), at: 0)
               let n = self.carIconArray.count
               let heightWidth = self.mapView.frame.height
                for marker in 1...n {
                    let carMarker = GMSMarker()
                    let carIconView = UIImage(named: "carPin")
                    let image = carIconView
                    let location = CLLocationCoordinate2D(latitude: Double(lattitude)!, longitude: Double(longitude)!)
                    carMarker.position = location
                    carMarker.icon = image
                    carMarker.title = title
                    carMarker.icon = self.image(image!, scaledToSize: CGSize(width: heightWidth/6, height: heightWidth/6))
                    func displayIt() {
                        if self.carNumber == "1" {
                            carMarker.map = self.mapView
                        } else {
                            carMarker.map = nil
                        }
                    }

                    displayIt()
                }
            }
        }
    }
}

所以这是按下按钮时的动作功能。

var carNumber = String()

@IBAction func showCar(_ sender: Any) {
    if motorisedVehicleButtonActive {
        motorisedVehicleButton.setImage(UIImage(named: "carO"), for: .normal)
        carNumber = "1"
    } else {
        motorisedVehicleButton.setImage(UIImage(named: "car"), for: .normal)
        carNumber = "0"
    }
    print(carNumber)
    motorisedVehicleButtonActive = !motorisedVehicleButtonActive
    showCarIcon()
}
swift xcode uibutton gmsmapview
1个回答
1
投票

让我解释一下代码的问题。

  1. 每次按下按钮时,您都在创建新标记。因此,新标记具有与旧标记不同的对象标识。
  2. 当您尝试删除它时,它将无法正常工作,因为它与您放置在地图上的标记不同。
  3. 因此,您需要在数组中存储标记并删除时间,从数组中获取图标并将其从地图中删除。

首先,您需要创建GMSMarker数组,因为您必须存储放置在地图上的每个标记。

因此,在您的课程顶部编写以下代码行。

var arrCarMarkers = [GMSMarker]()

之后,将此数组中的每个标记存储在您放置在地图上的位置。

因此,请按以下方式更新您的代码:

func displayIt() {
    if self.carNumber == "1" {
        carMarker.map = self.mapView
        arrCarMarkers.append(carMarker) // Here is store marker in array
    } else {
        carMarker.map = nil
    }
}

现在,您已将所有标记放置在地图上。因此,当您想要删除这些标记时,只需更新您的代码,如下所示:

@IBAction func showCar(_ sender: Any) {
    if motorisedVehicleButtonActive {
        motorisedVehicleButton.setImage(UIImage(named: "carO"), for: .normal)
        carNumber = "1"
        showCarIcon()
    } else {
        motorisedVehicleButton.setImage(UIImage(named: "car"), for: .normal)
        carNumber = "0"
        self.arrCarMarkers.forEach { $0.map = nil }
    }
    print(carNumber)
    motorisedVehicleButtonActive = !motorisedVehicleButtonActive
}

上面的代码将从地图中删除所有标记。

我希望这对你有用。

© www.soinside.com 2019 - 2024. All rights reserved.