在Swift 2.1中用MapKit添加不同的引脚颜色

我是Swift新手。 我试图在特定引脚上使用不同的颜色引脚或自定义引脚。 我的代码工作。 我有一个紫色的针,但我想在他们之间有所作为。 我该怎么做? 我认为有一些在MapView委托方法中做的事情,但我没有find它。

import UIKit import MapKit class MapsViewController: UIViewController , MKMapViewDelegate{ var shops: NSArray? { didSet{ self.loadMaps() } } @IBOutlet weak var map: MKMapView? override func viewDidLoad() { super.viewDidLoad() loadMaps() self.title = "Carte" self.map!.delegate = self } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { // simple and inefficient example let annotationView = MKPinAnnotationView() annotationView.pinTintColor = UIColor.purpleColor() return annotationView } func loadMaps(){ // navigationController?.navigationBar.topItem!.title = "Carte" let shopsArray = self.shops! as NSArray for shop in shopsArray { let location = CLLocationCoordinate2D( latitude: shop["lat"] as! Double, longitude: shop["long"] as! Double ) let annotation = MKPointAnnotation() annotation.coordinate = location annotation.title = shop["name"] as? String annotation.subtitle = shop["addresse"] as? String map?.addAnnotation(annotation) } // add point } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { // Get the new view controller using segue.destinationViewController. // Pass the selected object to the new view controller. } */ } 

更好的方法是使用实​​现MKAnnotation协议的自定义注释类(一种简单的方法来实现MKPointAnnotation子类),并添加需要的任何属性来帮助实现自定义逻辑。

在自定义类中,添加一个属性,例如pinColor ,您可以使用该属性来自定义注释的颜色。

这个例子的子类MKPointAnnotation:

 import UIKit import MapKit class ColorPointAnnotation: MKPointAnnotation { var pinColor: UIColor init(pinColor: UIColor) { self.pinColor = pinColor super.init() } } 

创buildtypespinColor注释并设置其pinColor

 let annotation = ColorPointAnnotation(pinColor: UIColor.blueColor()) annotation.coordinate = coordinate annotation.title = "title" annotation.subtitle = "subtitle" self.mapView.addAnnotation(annotation) 

在viewForAnnotation中,使用pinColor属性来设置视图的pinTintColor

 func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { if annotation is MKUserLocation { return nil } let reuseId = "pin" var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView if pinView == nil { pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId) let colorPointAnnotation = annotation as! ColorPointAnnotation pinView?.pinTintColor = colorPointAnnotation.pinColor } else { pinView?.annotation = annotation } return pinView }