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