如何使用Swift更改MKAnnotation Color?

我在地图上设置了MKAnnotations ,但我想更改不同场景的注释颜色。 有没有办法改变注释的颜色?

以下是我的代码,如何实现颜色变化?

 override func viewDidAppear(animated: Bool) { var annotationQuery = PFQuery(className: "Post") currentLoc = PFGeoPoint(location: MapViewLocationManager.location) //annotationQuery.whereKey("Location", nearGeoPoint: currentLoc, withinMiles: 10) annotationQuery.whereKeyExists("Location") annotationQuery.findObjectsInBackgroundWithBlock { (points, error) -> Void in if error == nil { // The find succeeded. println("Successful query for annotations") // Do something with the found objects let myPosts = points as! [PFObject] for post in myPosts { let point = post["Location"] as! PFGeoPoint let annotation = MKPointAnnotation() annotation.coordinate = CLLocationCoordinate2DMake(point.latitude, point.longitude) annotation.title = post["title"] as! String! annotation.subtitle = post["username"] as! String! self.mapView.addAnnotation(annotation) } } else { // Log details of the failure println("Error: \(error)") } } 

您可以将自定义图像用于注释视图,或将预定义的MKPinAnnotationViewpinColor MKPinAnnotationView使用。 但pinColors仅限于红色,绿色和紫色。

一些例子:

 import UIKit import MapKit class Annotation: NSObject, MKAnnotation { var coordinate: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: 0.0, longitude: 0.0) var custom_image: Bool = true var color: MKPinAnnotationColor = MKPinAnnotationColor.Purple } class ViewController: UIViewController, MKMapViewDelegate { @IBOutlet weak var mapView: MKMapView! override func viewDidLoad() { super.viewDidLoad() self.mapView.delegate = self; let annotation = Annotation.new() mapView.addAnnotation(annotation) let annotation2 = Annotation.new() annotation2.coordinate = CLLocationCoordinate2D(latitude: 0.0, longitude: 1.0) annotation2.custom_image = false mapView.addAnnotation(annotation2) let annotation3 = Annotation.new() annotation3.coordinate = CLLocationCoordinate2D(latitude: 1.0, longitude: 0.0) annotation3.custom_image = false annotation3.color = MKPinAnnotationColor.Green mapView.addAnnotation(annotation3) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { if (annotation is MKUserLocation) { return nil } var anView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) if anView == nil { if let anAnnotation = annotation as? Annotation { if anAnnotation.custom_image { let reuseId = "custom_image" anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId) anView.image = UIImage(named:"custom_image") } else { let reuseId = "pin" let pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId) pinView.pinColor = anAnnotation.color anView = pinView } } anView.canShowCallout = false } else { anView.annotation = annotation } return anView } } 

更新:在viewDidLoad中为mapView设置委托

您必须在viewForAnnotation方法中进行设置。 在本教程中,很好地解释了如何做到这一点。