gpt4 book ai didi

Swift:仅删除多个 MKPolyline

转载 作者:搜寻专家 更新时间:2023-10-31 19:30:13 28 4
gpt4 key购买 nike

我在 map 上有两条折线:

var polylineRoute : MKGeodesicPolyline!  
var polylineFlight : MKGeodesicPolyline!

我为它们每个分配了一个标题,并像这样(以不同的方法)将它们添加到 map 中:

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"

关于Swift:仅删除多个 MKPolyline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35566486/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com