Настройка пользовательского изображения - MKPinAnnotationView - Swift 3

Я использую MapKit и в настоящее время пытаюсь установить на свои контакты пользовательское изображение аннотации контактов. Однако мне сложно понять, почему это не работает. Весь остальной код работает отлично, и когда я пытаюсь распечатать фрейм изображения после его установки, он показывает правильные размеры для моего «pinImage», так что кажется, что можно установить изображение в свойстве.

Кроме того, делегат настроен правильно, это подтверждается установкой пользовательского цвета на булавке по умолчанию.

Я также пробовал использовать "pinImage.png", но безуспешно. А поскольку MKPinAnnotationView является подклассом MKAnnotationView, я не вижу проблем, почему это должно быть проблемой, и, конечно же, я попытался использовать MKAnnotationView, но безуспешно.

Вот мой код:

    func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

    if let annotation = annotation as? Pin {
        let identifier = LocalConstants.pinIdentifier
        var view: MKPinAnnotationView
        if let dequeuedView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) as? MKPinAnnotationView {
            dequeuedView.annotation = annotation
            view = dequeuedView
        } else {

            view = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
            view.canShowCallout = true
            view.calloutOffset = CGPoint(x: -5, y: 5)
            let detailButton = UIButton(type: .detailDisclosure) as UIView
            view.rightCalloutAccessoryView = detailButton
            //view.pinTintColor = Util.Colors.pluppPurple
        }
        view.image = UIImage(named: "pinImage")
        return view
    }

Заранее спасибо!


person Frizzo    schedule 03.11.2016    source источник


Ответы (1)


Ответ действительно заключался в использовании MKAnnotationView, а не MKPinAnnotationView. Не знаю, что я напутал вчера, когда пробовал. Окончательная рабочая копия ниже для использования в будущем:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

    if let annotation = annotation as? Pin {
        let identifier = LocalConstants.pinIdentifier
        var view: MKAnnotationView

        if let dequeuedView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) {
            dequeuedView.annotation = annotation
            view = dequeuedView
        } else {
            view = MKAnnotationView(annotation: annotation, reuseIdentifier: identifier)
            view.canShowCallout = true
            view.calloutOffset = CGPoint(x: -5, y: 5)
            view.tintColor = Util.Colors.pluppGrey

            let detailButton = UIButton(type: .detailDisclosure) as UIView
            view.rightCalloutAccessoryView = detailButton
        }
        view.image = UIImage(named: LocalConstants.pluppPin)
        return view
    }
    return nil
}
person Frizzo    schedule 03.11.2016