我有以下代码,目的是遍历当前Apple地图视图中的所有注释并更新其位置坐标。
for existingMarker in self.mapView.annotations {
existingMarker.coordinate.latitude = 12.12121212
existingMarker.coordinate.longitude = 14.312121121
}
可悲的是,这是不允许的。我被告知'坐标'是一个唯一的属性。所以这显然不是我想要更新MKAnnotation已经在mapView上绘制的注释的位置。那怎么办呢?具体来说,我想这样做并让地图“重绘”新坐标尽快。我确信这一定是可能的,因为它似乎是一个常见的用例。
答案 0 :(得分:9)
创建自己的MKAnnotation
课程,其中(a)coordinate
不是只读的;以及(b)它是dynamic
,例如:
class MyAnnotation: NSObject, MKAnnotation {
dynamic var coordinate: CLLocationCoordinate2D
dynamic var title: String?
dynamic var subtitle: String?
init(coordinate: CLLocationCoordinate2D, title: String? = nil, subtitle: String? = nil) {
self.coordinate = coordinate
self.title = title
self.subtitle = subtitle
super.init()
}
}
然后使用它代替MKPointAnnotation
。显然,您应该使用比MyAnnotation
更具描述性的名称。
另外,当你移动它们时,你真的应该将它们转换为你所谓的新注释类:
for existingMarker in self.mapView.annotations {
if let annotation = existingMarker as? MyAnnotation {
annotation.coordinate = CLLocationCoordinate2D(latitude: 12.12121212, longitude: 14.312121121)
}
}
或者
self.mapView.annotations.flatMap({ $0 as? MyAnnotation}).forEach {
$0.coordinate = CLLocationCoordinate2D(latitude: 12.12121212, longitude: 14.312121121)
}