Swift中无折线引用时,如何仅删除GMSMapView中的折线?
在Swift中精准删除GMSMapView的折线(保留标记与地面叠加层)
这个场景我太熟悉了——要是贸然用map.clear(),几百个标记和地面叠加层全没了,重新加载简直要命。好在我们可以利用Google Maps SDK的类型区分特性,不用提前保存折线的引用也能精准删除:
核心思路
Google Maps SDK里的元素分类很清晰:
GMSMarker(标记)不属于overlays集合,所以完全不用担心会被误删GMSGroundOverlay(地面叠加层)和GMSPolyline(折线)都属于GMSOverlay的子类,但类型不同,我们可以通过类型判断筛选出折线
实现代码
直接用两行代码就能搞定:
// 筛选出所有折线类型的Overlay let polylinesToRemove = mapView.overlays.filter { $0 is GMSPolyline } // 批量删除选中的折线 mapView.removeOverlays(polylinesToRemove)
代码解释
mapView.overlays会返回当前地图上所有的叠加层对象- 用
filter方法过滤出类型为GMSPolyline的对象,地面叠加层会被自动排除 - 调用
removeOverlays(_:)批量删除这些折线,效率比逐个删除更高
如果你的场景需要逐个处理(比如删除前做额外判断),也可以用遍历的方式:
for overlay in mapView.overlays { if overlay is GMSPolyline { mapView.removeOverlay(overlay) } }
内容的提问来源于stack exchange,提问作者Pablo Marrufo
相关产品推荐
相关产品推荐

