2017-05-28 33 views
1

我有以下代码,它旨在遍历当前苹果地图视图上的所有注释并更新它们的位置坐标。如何更新mapView上的MKAnnotation对象的位置?

for existingMarker in self.mapView.annotations { 

    existingMarker.coordinate.latitude = 12.12121212 
    existingMarker.coordinate.longitude = 14.312121121   
} 

不幸的是,这是不允许的。我被告知'坐标'是一个只能得到的属性。所以这显然不是我如何更新已经在mapView上绘制的注释的MKAnnotation的位置。那我该怎么做呢?具体而言,我想这样做,并使地图“重绘”与新坐标尽快。我相信这一定是可能的,因为它似乎是一个常见的用例。

回答

2

使自己MKAnnotation类,其中(一)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) 
} 
0

我可以推荐你删除的注释,并与新的坐标重新添加它:

self.mapView.removeAnnotation(existingMarker) 

然后:

map.addAnnotation(annotation: updatedMarkerWithNewCoordinates) 
相关问题