Swift: 仅删除多个 MKPolyline 中的一个

Swift: Removing only one MKPolyline of several

我在地图上有两条折线:

var polylineRoute : MKGeodesicPolyline!  
var polylineFlight : MKGeodesicPolyline! 

我给他们每个人分配了一个标题,然后像这样(用不同的方法)将它们添加到地图中:

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"  

polylineFlight 看起来不对。它是从 routeCoordinates 构建的,与 polylineRoute 相同。所以删除它不会在地图上产生任何变化。

您的建筑坐标正确吗?

我们可以看看 before/after 截图吗?或者我们可以看到 "does not work at all" 的说明吗?