gpt4 book ai didi

ios - 如何从 mapView 中删除我的自定义注释?

转载 作者:行者123 更新时间:2023-11-28 13:50:26 25 4
gpt4 key购买 nike

首先,我向您保证这不是一个重复的问题。我有一张 map ,如果用户更改区域,我想从 X 方向更改我的注释坐标。我的目标是在 View 的左侧创建我的图钉。

当我创建我的 pin 时,我将它添加到我的 var pin: MyCustomPin 中。然而,在我的地区DidChangeAnimated;

    func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {

calculateZoomFactor()

if isInLegalRegion() {
//.....
} else {
mapView.setCenter(mapCenter, animated: true)
}
arrangePins()
}

我的 arrangePins() 函数执行;

func arrangePins() {

for pin in pins {
let coord = pin.coordinate
let title = pin.title!
self.mapView.removeAnnotation(pin)

let xCoord = self.mapView.visibleMapRect.minX + 250
var newCoord = MKMapPoint(coord)
newCoord.x = xCoord

let newPin = MyPin(newCoord.coordinate, title)
mapView.addAnnotation(newPin)
}
}

到目前为止一切顺利。虽然看起来非常合乎逻辑和简单,但我的旧注释并没有从 map 上删除。有什么我想念的吗?

最佳答案

您正在从 mapView 中移除图钉,但并未将其从 pins 数组中移除。所以 - 当您创建一个新的图钉时,您总是将其 x 坐标基于您添加到数组中的原始图钉(并随后从 mapView 中删除)。

同样,您正在向 mapView 添加一个新的图钉,但并未将其附加到您的 pins 数组。因此,您永远不会从 mapView 中移除这些新引脚,因为您只是在遍历 pins 数组时从 mapView 中移除引脚。

例如,您的 arrangePins 方法可能如下所示:

func arrangePins() {
var newPins:[MyPin] = []
for pin in pins {
let coord = pin.coordinate
let title = pin.title!
self.mapView.removeAnnotation(pin)

var newCoord = MKMapPoint(coord)
newCoord.x = self.mapView.visibleMapRect.minX + 250

let newPin = MyPin(newCoord.coordinate, title)
mapView.addAnnotation(newPin)
newPins.append(newPin)
}
pins = newPins
}

(为了简化事情,我将新的引脚添加到 newPins 数组,然后在 for 循环之后用它替换 pins 数组。)

您可能需要考虑的几件事:

  • 您可以简单地使用 mapView.annotations 而不是维护您自己的 pin 数组(当然,这假设您正在调整 map 上的所有 pin,也许你只想调整一些特定的引脚)
  • 与其删除和添加图钉,不如移动图钉?例如,arrangePins 方法可能如下所示:
func arrangePins() {
for pin in pins {
var newCoord = MKMapPoint(pin.coordinate)
newCoord.x = self.mapView.visibleMapRect.minX + 250
pin.coordinate = newCoord.coordinate
}
}

关于ios - 如何从 mapView 中删除我的自定义注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54705756/

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