Я пытаюсь показать изображения в MKAnnotationView.Изображения загружаются изначально, но когда я пытаюсь изменить изображения для нескольких нажатием кнопки, изображения не меняются, а перекрываются.Ниже приведен код, который я использовал.
Делегат MapView
extension MapViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation {
return nil
}
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "MapAnnotation") as? MapAnnotationView
if annotationView != nil {
annotationView?.annotation = annotation
}
else {
annotationView = MapAnnotationView(annotation: annotation, reuseIdentifier: "MapAnnotation")
}
annotationView?.canShowCallout = true
return annotationView
}
MKAnnotationView
class MapAnnotationView: MKAnnotationView {
// Required for MKAnnotationView
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(annotation: MKAnnotation?, reuseIdentifier: String?) {
super.init(annotation: annotation, reuseIdentifier: reuseIdentifier)
//super.prepareForReuse()
guard let attractionAnnotation = self.annotation as? MapAnnotation else { return }
if attractionAnnotation.type == PinType.hospital {
image = UIImage.init(named: "hospital_green")
}
}
Действие кнопки
@IBAction func btnGreen_Click(_ sender: Any) {
for annotation in (policyMapView?.annotations)! {
let mapAnnotationView = policyMapView?.view(for: annotation) as? AssistMapAnnotationView
//if !(mapAnnotationView?.annotation is MKUserLocation) {
if !(mapAnnotationView?.annotation is MKUserLocation) {
let mapAnnotation = annotation as? AssistMapAnnotation
if mapAnnotation?.type == PinType.hospital {
if (mapAnnotation?.insurer_id == selectedInsurer1) {
mapAnnotationView?.image = UIImage.init(named: "hospital_purple")
}else{
mapAnnotationView?.image = UIImage.init(named: "hospital_green")
}
}
} else {
}
}
}
}