2015-09-17 18 views
32

Il mio codice ha funzionato bene da iOS 7 a 8. Con l'aggiornamento di ieri le immagini personalizzate sui miei pin sono state sostituite dall'immagine pin standard. Qualche suggerimento?MapKit non mostra immagine pin di annotazione personalizzata su iOS9

Il mio codice:

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 funzione per ottenere l'immagine restituisce un UIImage in base al nome:

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 mappa assomiglia a questo: ios9 without images

risposta

70

Invece di creazione di un MKPinAnnotationView, creazione di un piano MKAnnotationView.

Il MKPinAnnotationView sottoclasse tende a ignorare la proprietà immagine poiché è progettato per mostrare rosso, verde, viola perni standard solo (tramite la proprietà pinColor).

Quando si passa alla MKAnnotationView, si dovrà commentare la riga animatesDrop pure poiché che la proprietà è specifico per MKPinAnnotationView.

+0

Ho avuto lo stesso problema esatto. La tua soluzione suggerita l'ha sistemata per me, grazie. – Perex19

+0

Questa soluzione ha funzionato anche per me. Grazie! –

+0

Grazie! È stato perfetto. – Natasha

3

seguito il codice funziona perfettamente su tutti iOS 6 a iOS 9 dispositivi:

- (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; 
} 
Problemi correlati