使用Swift 3使用不同的标记来标注地图

时间:2018-08-21 08:20:20

标签: ios swift mkmapview mkannotationview

我正在使用地图视图注释。 标记注释应使用停车规则类型显示 如果已支付,则“支付”销钉图像;如果已支付,则“免费”销毁图像 我将所有注释都显示为“付费”图片

我在下面附加了我的代码,在此问题上,有谁能帮助我解决

enter image description here

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

    // Don't want to show a custom image if the annotation is the user's location.
    guard !(annotation is MKUserLocation) else {
        return nil
    }

    // Better to make this class property
    let annotationIdentifier = "AnnotationIdentifier"

    var annotationView: MKAnnotationView?
    if let dequeuedAnnotationView = mapView.dequeueReusableAnnotationView(withIdentifier: annotationIdentifier) {
        annotationView = dequeuedAnnotationView
        annotationView?.annotation = annotation
    }
    else {
        annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier)
        annotationView?.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
    }

    if let annotationView = annotationView {
        // Configure your annotation view here
        if parkingTypeArray.count > 0 {


            for cameraa in parkingTypeArray.enumerated() {

                if cameraa.element == "Free street parking" {

                    let pinImage = UIImage(named: "free")
                    annotationView.image = pinImage

                }else if cameraa.element == "Paid street parking" {

                    let pinImage = UIImage(named: "paid")
                    annotationView.image = pinImage

                }else if cameraa.element == "Paid parking" {

                    let pinImage = UIImage(named: "paid")
                    annotationView.image = pinImage
                }
            }
        }
    }

    return annotationView
}

1 个答案:

答案 0 :(得分:1)

我使用自定义功能完成的事情 MKPointAnnotation 课程

class MyPointAnnotation : MKPointAnnotation {
   var obj : ComparableData?

    init(data_obj : ComparableData) {
        self.obj = data_obj
        super.init()
    }
}

设置地图

for item in self.Arr_Map_Comparables{

    if item.Latitude != "" && item.Longitude != ""{
        let annotation = MyPointAnnotation(data_obj: item)
        annotation.coordinate = CLLocationCoordinate2D(latitude: Double(item.Latitude!)!, longitude: Double(item.Longitude!)!)
        annotation.title = item.Full_Address
        mapView.addAnnotation(annotation)
    }

}    
self.focusMarkers(markers: mapView.annotations, width: 50)

MapView委托方法

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?{
    // Don't want to show a custom image if the annotation is the user's location.
    guard !(annotation is MKUserLocation) else {
        return nil
    }

    // Better to make this class property
    let annotationIdentifier = "AnnotationIdentifier"

    var annotationView: MKAnnotationView?
    if let dequeuedAnnotationView = mapView.dequeueReusableAnnotationView(withIdentifier: annotationIdentifier) {
        annotationView = dequeuedAnnotationView
        annotationView?.annotation = annotation
    }
    else {
        annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier)
    }

    if let annotationView = annotationView {
        // Configure your annotation view here
        annotationView.canShowCallout = true

        if let annotation = annotationView.annotation as? MyPointAnnotation{

            if annotation.obj?.Status_Mls == "Active"{

                annotationView.image = UIImage(named: "active")

            }else if annotation.obj?.Status_Mls == "Sold"{

                annotationView.image = UIImage(named: "sold")

            }else{
                annotationView.image = UIImage(named: "other")
            }
        }
    }
    return annotationView
}