我试图根据注释包含的值来更改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
}
答案 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
}
}
}