Позвольте мне объяснить, в чем проблема с вашим кодом.
Вы создаете новый маркер каждый раз, когда нажимаете кнопку.Таким образом, новый маркер имеет другой идентификатор объекта, чем более старый.
Когда вы попытаетесь удалить его, он не будет работать только из-за того, что он отличается от маркера, который вы поместили на карту.
Так что вам нужно сохранить маркер в массиве и на время удаления, получить значок из массива и удалить его с карты.
Сначала вам нужносоздать массив 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
}
Выше кода удалит все маркеры с карты.
Надеюсь, это будет работатьдля тебя.