根据对象类型更改iOS上的annontation图像

时间:2018-04-30 09:46:48

标签: ios swift maps mapkit mkannotation

我试图根据注释包含的值来更改MKMarkerAnnontationView的图像。所有注释都使用此代码获得相同的图像,我需要根据用户选择的值以某种方式设置图像。因此,当用户按下另一种类型的停车时,正在使用相同的对象,但使用另一种类型。

我试图强制注释重新加载,但我没有让它工作。有什么指示可以帮助我吗?

if let dequeuedView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) as? MKMarkerAnnotationView {
            dequeuedView.annotation = annotation
            view = dequeuedView
        } else {

            view = MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: identifier)
            view.canShowCallout = true
            view.glyphTintColor = UIColor.white
            view.calloutOffset = CGPoint(x: -5, y: 5)

            if annotation.type == .bus {
                view.glyphImage = UIImage(named: "bus")
            } else if annotation.type == .disabled {
                view.glyphImage = UIImage(named: "disabled")
            } else if annotation.type == .MC {
                view.glyphImage = UIImage(named: "mc")
            }
        }
        return view
    }
    return nil
}

1 个答案:

答案 0 :(得分:1)

我有这样的问题,我解决它的唯一方法是从MKMapView中删除所有数据点,然后用func mapView中的唯一区别读取它们(_ mapView:MKMapView,didAdd views:[MKAnnotationView]我正在检查MKAnnotationView具有的whitch标题。 为了实现这一目标,我创建了一个扩展MKAnnotationView的对象类,还有一个标题变量,因此我的注释列表就是类对象。 当用户更改MKAnnotation的图像时,您可以在选项中更改标题变量,然后首先执行

self.sceneView.removeAnnotations(annotations)

并在重新添加注释点之后。将被调用的委托函数就像那样

func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) {
    for view in views{
        if((view.annotation is MKUserLocation) == false){
            // Resize image
            let dt:DataPoint = view.annotation as! DataPoint //Data point is my class
            var pinImage:UIImage!
            if(dt.title = "example"){
                pinImage = exampleImage
                size = CGSize(width: 60, height: 60) //whetever size
            }else{
                pinImage = anotherImage
            }
            UIGraphicsBeginImageContext(size)
            pinImage?.draw(in: CGRect(x:0, y:0, width: size.width, height: size.height))
            let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            view.image = resizedImage
        }
    }
}