Swift 3.0为MapView设置注释引脚颜色

时间:2017-05-17 03:16:38

标签: swift annotations android-mapview mkannotationview

我无法为地图注释设置引脚颜色。我在我的MapView视图控制器中有一个函数,它从另一个视图控制器中拉出一个数组,并且根据类型的情况,我想要地图视图的不同引脚颜色。我不知道如何将pin颜色信息添加到此switch语句中的注释中。我对注释的理解相当薄弱,因此非常感谢任何解释,而不是解决方案本身。

class ColorPointAnnotation: MKPointAnnotation {
    var pinColor: UIColor

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


    func add(newLocation location_one:[String:Any]) {

    let momentaryLat = (location_one["latitude"] as! NSString).doubleValue
    let momentaryLong = (location_one["longitude"] as! NSString).doubleValue

    var annotation = MKPointAnnotation()

    switch location_one["type"] {
        case "Tomorrow":
            print("The pin color is red")
            annotation = ColorPointAnnotation(pinColor: UIColor.red)
        case "Next Week":
            print("The pin color is green")
            annotation = ColorPointAnnotation(pinColor: UIColor.green)
        default:
            print("The pin color is purple")
            annotation = ColorPointAnnotation(pinColor: UIColor.purpleColor)
    }

    annotation.title = location_one["title"] as? String
    annotation.coordinate = CLLocationCoordinate2D(latitude: momentaryLat as CLLocationDegrees, longitude: momentaryLong as CLLocationDegrees)


    DispatchQueue.main.async {
        self.map.addAnnotation(annotation)
    }

    self.map.centerCoordinate = annotation.coordinate

}


  func mapView(_ map: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

    //        if (annotation is MKUserLocation) {
    //            return nil
    //        }

    let identifier = "pinAnnotation"
    var annotationView = map.dequeueReusableAnnotationView(withIdentifier: identifier) as? MKPinAnnotationView


    if annotationView == nil {
        annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
        annotationView?.canShowCallout = true
        let colorPointAnnotation = annotation as! ColorPointAnnotation
        annotationView?.pinTintColor = colorPointAnnotation.pinColor

    }
    //      else {
    //            annotationView?.annotation = annotation
    //
    //        }
    //        map.showAnnotations(map.annotations, animated: true)
    return annotationView
}

1 个答案:

答案 0 :(得分:2)

您需要将switch语句移动到viewForAnnotation委托方法中。返回销钉时,您可以自定义颜色,然后将其返回。

像这样:

        annotation.pinColor = MKPinAnnotationColorGreen;

更新的答案:

您可以继承MKPointAnnotation,并添加存储注释类型的属性。

在add方法中创建注释时,请将该属性设置为任何类型的引脚。

现在在viewForAnnotation方法中,mapkit将给出您的类型的注释。查看set属性并确定要返回的颜色引脚。

如果您想查看一些代码,请告诉我。