停留在Swift和MapKit中使用MKPinAnnotationView()

我有一个工作循环来设置一些工作数据点的标题和字幕元素的注释。 我想在同一个循环结构中做的是将引脚颜色设置为紫色而不是默认值。 我无法弄清楚是我需要做什么来挖掘我的地图视图相应地设置引脚。

我的工作循环和一些尝试…

.... 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的工作原理也是一样的。

for循环中删除MKPinAnnotationView的创build,添加批注并实现委托方法。

以下是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 }