我正在创建一个显示不同位置的应用。当前,当按下按钮时,汽车位置会在地图上弹出,但是如果再次按下相同的按钮,我想隐藏那些显示的标记。
此功能可从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()
}
答案 0 :(得分:1)
让我解释一下您的代码有什么问题。
每次按下按钮时,您都在创建新标记。因此,新标记的对象ID与旧标记不同。
当您尝试删除它时,仅由于它与放置在地图上的标记不同而无法使用。
因此,您需要将标记存储在数组中,并在删除时间上,从数组中获取图标并将其从地图中删除。
首先,您需要创建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
}
以上代码将从地图上删除所有标记。
我希望这对您有用。