mkmapview mapkit mkannotation ios9 mkannotationview

mkmapview - MapKit no muestra una imagen personalizada de pin de anotación en iOS9



mkannotation mkannotationview (2)

Mi código funcionó bien desde iOS 7 a 8. Con la actualización de ayer, las imágenes personalizadas en mis pines fueron reemplazadas por la imagen de pin estándar. ¿Alguna sugerencia?

Mi código:

extension ViewController: MKMapViewDelegate { func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView! { if annotation is MKUserLocation { return nil } let reuseId = String(stringInterpolationSegment: annotation.coordinate.longitude) var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView if pinView == nil { pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId) pinView!.canShowCallout = true pinView!.image = getRightImage(annotation.title!!) } let button = UIButton(type: UIButtonType.DetailDisclosure) pinView?.rightCalloutAccessoryView = button return pinView } }

La función para obtener la imagen devuelve un UIImage basado en el nombre:

func getRightImage (shopName:String)-> UIImage{ var correctImage = UIImage() switch shopName { case "Kaisers": correctImage = UIImage(named: "Kaisers.jpg")! default: correctImage = UIImage(named: "sopiconsmall.png")! } return correctImage }

No, el mapa se ve así:


El siguiente código funciona perfectamente en todos los dispositivos iOS 6 a iOS 9:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation { // create a proper annotation view, be lazy and don''t use the reuse identifier MKAnnotationView *view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"identifier"]; // create a disclosure button for map kit UIButton *disclosure = [UIButton buttonWithType:UIButtonTypeContactAdd]; [disclosure addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(disclosureTapped)]]; view.rightCalloutAccessoryView = disclosure; view.enabled = YES; view.image = [UIImage imageNamed:@"map_pin"]; return view; }


En lugar de crear un MKPinAnnotationView , cree un MKAnnotationView simple.

La subclase MKPinAnnotationView tiende a ignorar la propiedad de la imagen, ya que está diseñada para mostrar solo los pines estándar rojo, verde y morado (a través de la propiedad pinColor).

Cuando cambie a MKAnnotationView , también tendrá que comentar la línea MKPinAnnotationView ya que esa propiedad es específica de MKPinAnnotationView .