当前位置 : 主页 > 手机开发 > 其它 >

Swift:只删除一个MKPolyline

来源:互联网 收集:自由互联 发布时间:2021-06-11
我在地图上有两条折线: var polylineRoute : MKGeodesicPolyline! var polylineFlight : MKGeodesicPolyline! 我为每个人分配了一个标题,并将它们添加到地图中(使用不同的方法): let polyline = MKGeodesicPolyli
我在地图上有两条折线:

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"
网友评论