2017-05-28 77 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) 
相關問題