2015-09-17 18 views
32

Mój kod działał dobrze od iOS 7 do 8. Wczoraj z aktualizacją niestandardowe obrazy na szpilkach zostały zastąpione przez standardowy obraz pinezki. Jakieś sugestie?MapKit nie wyświetla niestandardowego obrazu pinezki adnotacji na iOS9

Mój kod:

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

Funkcja aby uzyskać obraz zwraca UIImage na podstawie nazwy:

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 
} 

Nie mapa wygląda następująco: ios9 without images

Odpowiedz

70

Zamiast tworząc MKPinAnnotationView , utwórz zwykły MKAnnotationView.

MKPinAnnotationView podklasa ma tendencję do ignorowania właściwości obrazu ponieważ jest zaprojektowany, aby pokazać tylko standardowe czerwone, zielone, fioletowe szpilki (za pośrednictwem właściwości pinColor).

Po przełączeniu na MKAnnotationView, musisz zakomentować linię animatesDrop jak dobrze ponieważ nieruchomość jest specyficzna MKPinAnnotationView.

+0

miałem dokładnie ten sam problem. Twoje sugerowane rozwiązanie naprawiło to dla mnie, dzięki. – Perex19

+0

To rozwiązanie sprawdziło się również dla mnie. Dzięki! –

+0

Dzięki! to było świetne. – Natasha

3

następujący kod działa idealnie na wszystkich iOS 6 do 9 urządzeń iOS:

- (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; 
} 
Powiązane problemy