简体   繁体   English

如何使用Swift更改MKAnnotation Color?

[英]How to change MKAnnotation Color using Swift?

I have MKAnnotations set up on a map, but I would like to change the color of the annotations for different scenario's. 我在地图上设置了MKAnnotations ,但我想更改不同场景的注释颜色。 Is there a way to change the color of the annotation? 有没有办法改变注释的颜色?

Here is my code below, how would I implement the color change? 以下是我的代码,如何实现颜色变化?

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)")
        }
    }

You can use custom images for annotation view or use predefined MKPinAnnotationView with pinColor . 您可以将自定义图像用于注释视图,也可以将预定义的MKPinAnnotationViewpinColor MKPinAnnotationView使用。 But pinColors limited to Red, Green and Purple. 但pinColors仅限于红色,绿色和紫色。

Some example: 一些例子:

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
}
}

Update: Set delegate for mapView in viewDidLoad 更新:在viewDidLoad中为mapView设置委托

You have to set it in the viewForAnnotation method. 您必须在viewForAnnotation方法中设置它。 In this tutorial is quite well explained how doing it. 在本教程中很好地解释了如何做到这一点。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM