Изменение изображения аннотации на iOS в зависимости от типа объекта - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь изменить изображение 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 голосов
/ 30 апреля 2018

У меня была такая проблема, и единственный способ, который я решил, это удалить все точки данных из 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
        }
    }
}
...