我在地图上有两条折线: 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"
