首先,我向您保证这不是重复的问题。我有一张地图,如果用户更改区域,我想从X方向更改注释坐标。我的目标是在视图的左侧创建图钉。
当创建我的密码时,我将其添加到var密码中:MyCustomPin也是如此。但是,在我的区域中,DidChangeAnimated;
func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
calculateZoomFactor()
if isInLegalRegion() {
//.....
} else {
mapView.setCenter(mapCenter, animated: true)
}
arrangePins()
}
和我的rangingPins()函数都起作用;
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)
}
}
到目前为止,一切都很好。尽管它看起来很合逻辑且很简单,但是我的旧注释并没有从地图中删除。有什么我想念的吗?
答案 0 :(得分:1)
您要从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
数组。)
您可能需要考虑的几件事:
pins
来代替维护自己的mapView.annotations
数组(当然,这是假设您正在调整地图上的所有图钉,也许您只想调整某些特定的图钉) )arrangePins
方法可能看起来像这样:func arrangePins() {
for pin in pins {
var newCoord = MKMapPoint(pin.coordinate)
newCoord.x = self.mapView.visibleMapRect.minX + 250
pin.coordinate = newCoord.coordinate
}
}