简体   繁体   English

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

[英]Add different pin color with MapKit in swift 2.1

I'm new in Swift. 我是Swift的新手。 I'm trying to have different color pin or custom pin on specific pin. 我正在尝试在特定引脚上使用不同颜色的引脚或自定义引脚。 My code works. 我的代码有效。 I've a purple pin, but I want make a difference between them. 我有一个紫色的针,但我希望它们之间有所区别。 How can I do it? 我该怎么做? I think there something to do in MapView delegate method but I didn't find it. 我认为在MapView委托方法中有一些事情要做,但我没有找到它。

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.
    }
    */

}

A better approach is to use a custom annotation class that implements the MKAnnotation protocol (an easy way to do that is to subclass MKPointAnnotation ) and add whatever properties are needed to help implement the custom logic. 更好的方法是使用实​​现MKAnnotation协议的自定义注释类(一种简单的方法是子类化MKPointAnnotation )并添加帮助实现自定义逻辑所需的任何属性。

In the custom class, add a property, say pinColor , which you can use to customize the color of the annotation. 在自定义类中,添加一个属性,比如pinColor ,您可以使用该属性来自定义注释的颜色。

This example subclasses MKPointAnnotation: 此示例是MKPointAnnotation的子类:

import UIKit
import MapKit

class ColorPointAnnotation: MKPointAnnotation {
    var pinColor: UIColor

    init(pinColor: UIColor) {
        self.pinColor = pinColor
        super.init()
    }
}

Create annotations of type ColorPointAnnotation and set their pinColor : 创建注释类型ColorPointAnnotation并设置其pinColor

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

In viewForAnnotation, use the pinColor property to set the view's pinTintColor : 在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
}

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

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