我想在google map中删除d折线,但是我仍然尝试了一切,正如您从代码中看到的一样,我还检查了调试区域,rectangular.map为nil?但它仍然出现在地图上,并且我不希望用户使用clear方法是可以正常工作的,但是我在地图上有其他要删除的元素
DispatchQueue.main.async {
let path = GMSMutablePath()
path.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.0))
path.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.0))
path.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.2))
path.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.2))
path.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.0))
let rectangle = GMSPolyline(path: path)
var oldPolylineArr = [GMSPolyline]()
oldPolylineArr.append(rectangle)
if self.count == 0 {
rectangle.map = self.googelMap
print("count \(self.count)")
self.count = 1
}
else if self.count == 1 {
//rectangle.map = nil
//path.removeAllCoordinates()
self.count = 0
for p in (0 ..< oldPolylineArr.count) {
oldPolylineArr[p].map = nil
}
}
}
}
答案 0 :(得分:2)
这是局部变量(在函数内部)
var oldPolylineArr = [GMSPolyline]()
oldPolylineArr.append(rectangle)
您需要将其设为实例var,因为它拥有最后一个实例,因此请删除此行
var oldPolylineArr = [GMSPolyline]()
然后清除所有操作
oldPolylineArr.forEach { $0.map = nil }
之后,设置新创建的折线
rectangle.map = self.googelMap
这将添加一条折线并删除旧的
class ViewController:UIViewController {
var oldPolylineArr = [GMSPolyline]()
override func viewDidLoad() {
super.viewDidLoad()
}
func addPolyAndRemoveOld() {
DispatchQueue.main.async {
// remove here
oldPolylineArr.forEach { $0.map = nil }
// add new
let path = GMSMutablePath()
path.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.0))
path.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.0))
path.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.2))
path.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.2))
path.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.0))
let rectangle = GMSPolyline(path: path)
oldPolylineArr.append(rectangle)
rectangle.map = self.googelMap
}
}
}