2017-05-28 2 views
1

私は、現在のリンゴマップビューのすべての注釈をループし、その位置座標を更新することを目的とした次のコードを持っています。mapViewでMKAnnotationオブジェクトの場所を更新するにはどうすればよいですか?

for existingMarker in self.mapView.annotations { 

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

悲しいことに、これは許されません。私は、「座標」は取得専用のプロパティであると言われています。これは明らかに、mapViewに既に描画されている注釈のMKAnnotationの位置を更新する方法ではありません。どうすればいいですか?具体的には、これを行い、新しい座標ASAPを使用してマップを「再描画」したいと考えています。これは一般的な使用例のように思えるので、これが可能でなければならないと確信しています。

答えて

2

(a)のcoordinateがあるあなた自身のMKAnnotationクラスを作ります読み込み専用ではありません。そしてここで、(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) 
関連する問題