微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift:只删除一个MKPolyline

我在地图上有两条折线:

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"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐