gpt4 book ai didi

swift - 按钮显示 GMSMarkers 但没有隐藏它,如何让它同时执行这两项操作

转载 作者:行者123 更新时间:2023-11-28 13:46:09 27 4
gpt4 key购买 nike

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

这是从 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()
}
}
}
}
}

所以这是按下按钮时的 Action 函数。

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()
}

最佳答案

让我解释一下您的代码有什么问题。

  1. 每次按下按钮时,您都在创建新标记。因此,新标记与旧标记具有不同的对象 ID。

  2. 当您尝试删除它时,它不会起作用,因为它与您放置在 map 上的标记不同。

  3. 因此您需要将标记存储在数组中,并在删除时从数组中获取图标并将其从 map 中删除。

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

因此,在您的类(class)顶部编写以下代码行。

var arrCarMarkers = [GMSMarker]()

然后,将您放置在 map 上的每个标记存储在这个数组中。

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

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

现在,您拥有放置在 map 上的所有标记。因此,当您想要删除这些标记时,只需按如下方式更新您的代码:

@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
}

以上代码将从 map 上删除所有标记。

我希望这对你有用。

关于swift - 按钮显示 GMSMarkers 但没有隐藏它,如何让它同时执行这两项操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55368935/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com