2016-11-03 3 views
0

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

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

Я также пробовал использовать «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 
    } 

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

ответ

0

Ответ был действительно на использование 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 
} 
Смежные вопросы