我在 map 上有两条折线:
var polylineRoute : MKGeodesicPolyline!
var polylineFlight : MKGeodesicPolyline!
我为它们每个分配了一个标题,并像这样(以不同的方法)将它们添加到 map 中:
let polyline = MKGeodesicPolyline(coordinates: &routeCoordinates, count: routeCoordinates.count)
polyline.title = "route"
self.mapView.addOverlay(polyline)
self.polylineRoute = polyline
和
let polyline = MKGeodesicPolyline(coordinates: &routeCoordinates, count: routeCoordinates.count)
polyline.title = "flight"
self.mapView.addOverlay(polyline)
self.polylineFlight = polyline
现在,当触发特定操作时,我只想删除航类叠加层并保持路线叠加层不变。
这根本不起作用:
func removeFlightPath()
{
self.mapView.removeOverlay(self.polylineFlight)
self.polylineFlight = nil
}
以下有效但删除了两条折线:
func removeFlightPath()
{
var overlays = mapView.overlays
mapView.removeOverlays(overlays)
}
有没有一种方法可以只删除一条多段线?我搜索了论坛,只有一个回复说可以使用标题。但是,它没有具体说明如何完成。
非常感谢!
编辑:
这解决了问题:
func removeFlightPath()
{
if self.polylineFlight != nil
{
// Overlays that must be removed from the map
var overlaysToRemove = [MKOverlay]()
// All overlays on the map
let overlays = self.mapView.overlays
for overlay in overlays
{
if overlay.title! == "flight"
{
overlaysToRemove.append(overlay)
}
}
self.mapView.removeOverlays(overlaysToRemove)
}
}
最佳答案
我认为您的源代码是正确的。可能是引用计数搞砸了。只要对象被引用,MKGeodesicPolyline 就不会被移除。在您的代码中,您使用了局部变量来创建折线对象。我在不使用局部变量的情况下进行了尝试,它正在删除多段线。
self.polylineFlight = MKGeodesicPolyline(coordinates: &routeCoordinates, count: routeCoordinates.count)
self.polylineFlight.title = "flight"
关于Swift:仅删除多个 MKPolyline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35566486/