2015-09-17 12 views
32

Mein Code funktionierte gut von iOS 7 bis 8. Mit dem Update gestern wurden die benutzerdefinierten Bilder auf meinen Pins durch die Standard-Pin-Bild ersetzt. Irgendwelche Vorschläge?MapKit nicht benutzerdefinierte Anmerkungsstift Bild auf iOS9

Mein Code:

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

Die Funktion um das Bild zu bekommen gibt einen UIImage auf den Namen basiert:

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 
} 

die keine Karte wie folgt aussieht: ios9 without images

Antwort

70

statt Erstellen Sie eine MKPinAnnotationView, erstellen Sie eine einfache MKAnnotationView.

Die MKPinAnnotationView Unterklasse neigt dazu, die Bildeigenschaft zu ignorieren, da es nur die Standard-rot, grün, lila Pins zeigen entworfen ist (über die pinColor Eigenschaft).

Wenn Sie zu MKAnnotationView wechseln, werden Sie die animatesDrop Linie und kommentieren Sie müssen da diese Eigenschaft auf MKPinAnnotationView spezifisch ist.

+0

ich genau das gleiche Problem hatte. Ihre vorgeschlagene Lösung hat es für mich repariert, danke. – Perex19

+0

Diese Lösung hat auch für mich funktioniert. Vielen Dank! –

+0

Danke! das war großartig. – Natasha

3

folgenden Code funktioniert perfekt auf allen iOS 6 auf iOS 9 Geräte:

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