У меня была такая проблема, и единственный способ, который я решил, это удалить все точки данных из MKMapView и затем прочитать их с той лишь разницей, что в func mapView (_ mapView: MKMapView, didAdd views: [MKAnnotationView] Я проверял заголовок, который имел MKAnnotationView.
Чтобы добиться этого, я создал объектный класс, который расширил MKAnnotationView, а также имел переменную заголовка, поэтому список моих аннотаций состоял в том, что классы объектов.
Когда пользователь изменяет изображение MKAnnotation, вы меняете переменную title в выборе и сначала делаете
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
}
}
}