概要
MapKit Annotationのマーカーカラーをannotationの状態によって変更する。
MKPointAnnotationでは、マーカー座標、タイトル、サブタイトルの指定しか行えないので、MKPinAnnotationView
、MKMarkerAnnotationView
を使用する。
MKPointAnnotationの拡張クラス
はじめに、MKPinAnnotationView
、MKMarkerAnnotationView
はMKPointAnnotation設置時のdelegateメソッドで生成し、AnnotationViewを返すので、MKPointAnnotationにマーカー色を決定する状態を保持するプロパティを持っておく必要がある。
よって、MKPointAnnotationを拡張したinner classを用意しておく。
class StatusMKPointAnnotation: MKPointAnnotation{ var status:String = "" } let mapView:MKMapView! let status:String = "" override func viewDidLoad() { super.viewDidLoad() self.mapView.delegate = self let pin = StatusMKPointAnnotation() pin.coordinate = position //色を識別するstatusを保持 pin.status = self.status self.mapView.addAnnotation(pin) }
マーカーカラーの変更を行う
あとはstatusに応じたマーカーカラーの変更を行う処理をdelegateメソッドに記述すればよい。
extension MyMapViewController: MKMapViewDelegate{ func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { let statusMKPointAnnotation = annotation as! StatusMKPointAnnotation let pinView = MKMarkerAnnotationView(annotation: statusMKPointAnnotation, reuseIdentifier: nil) if( statusMKPointAnnotation.status == "new" ){ pinView.markerTintColor = UIColor.red }else if(statusMKPointAnnotation.status == "assigned" ){ pinView.markerTintColor = UIColor.blue }else if(statusMKPointAnnotation.status == "close" ){ pinView.markerTintColor = UIColor.darkGray } return pinView } }
リンク
リンク