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
}
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
.