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