一部の作業データポイントのタイトル要素とサブタイトル要素の注釈を設定するための作業ループがあります。同じループ構造内でやりたいのは、ピンの色をデフォルトではなく紫に設定することです。私が理解できないのは、それに応じてピンを設定するためにMapViewを利用するために何をする必要があるかです。
私の作業ループと何かの試み...
....
for var index = 0; index < MySupplierData.count; ++index {
// Establish an Annotation
myAnnotation = MKPointAnnotation();
... establish the coordinate,title, subtitle properties - this all works
self.theMapView.addAnnotation(myAnnotation) // this works great.
// In thinking about PinView and how to set it up I have this...
myPinView = MKPinAnnotationView();
myPinView.animatesDrop = true;
myPinView.pinColor = MKPinAnnotationColor.Purple;
// Now how do I get this view to be used for this particular Annotation in theMapView that I am iterating through??? Somehow I need to marry them or know how to replace these attributes directly without the above code for each data point added to the view
// It would be Nice to have some kind of addPinView.
}
viewForAnnotation
デリゲートメソッドを実装し、そこからMKAnnotationView
(またはサブクラス)を返す必要があります。
これはObjective-Cと同じです。基盤となるSDKは同じように機能します。
アノテーションを追加するMKPinAnnotationView
ループからfor
の作成を削除し、代わりにデリゲートメソッドを実装します。
SwiftのviewForAnnotation
デリゲートメソッドの実装例を次に示します。
func mapView(mapView: MKMapView!,
viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
if annotation is MKUserLocation {
//return nil so map view draws "blue dot" for standard user location
return nil
}
let reuseId = "pin"
var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView
if pinView == nil {
pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
pinView!.canShowCallout = true
pinView!.animatesDrop = true
pinView!.pinColor = .Purple
}
else {
pinView!.annotation = annotation
}
return pinView
}