2017-05-29 2 views
0

In meinem Code verwende ich Apple Maps und ordne richtig ein mapView und den Delegierten zu Selbst innerhalb eines View Controllers.Warum kann ich meinen MKAnnotationView nicht anpassen?

In meinem Viewcontroller Ich habe auch den folgenden Code innerhalb eines for-Schleife:

if userOnMapAlready == false { 
    let annotation = MKPointAnnotation() 
    annotation.coordinate = CLLocationCoordinate2D(latitude: otherUserLocation.coordinate.latitude, longitude: otherUserLocation.coordinate.longitude) 
    annotation.subtitle = otherUserUUID 
    self.mapView.addAnnotation(annotation) 

} 

Ich habe auch die folgende Delegatfunktion in meinen Ansicht-Controller, und wieder bin Einstellung mapview.delegate = selbst innerhalb der View-Controller :

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 
     if annotation is MKUserLocation { 
      //return nil so map view draws "blue dot" for standard user location 
      return nil 
     } 

     let reuseId = "pin" 

     var pinView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId) as? MKPinAnnotationView 
     if pinView == nil { 
      pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId) 
      pinView!.canShowCallout = true 
      pinView!.animatesDrop = true 
      pinView!.pinColor = .purple 
     } 
     else { 
      pinView!.annotation = annotation 
     } 

     return pinView 

    } 

Leider, wenn die Stifte gezeichnet sind sie alle rot sind, sollten nicht lila wie die viewForAnnotation vorschlagen würde sie sein. Was ist das Problem?! Hat es etwas mit der Wiederverwendung zu tun, die nicht mit dem eindeutigen Untertitel übereinstimmt, wenn ich jedem MKPointAnnotation einen Namen gebe?

UPDATE: gerade festgestellt, dass die Delegiertenfunktion viewForAnnotation nie aufgerufen wird - was erklären würde, warum die Pins nicht lila sind. Warum sollte viewForAnnotation nicht aufgerufen werden ???

Antwort

0

In der neuesten Version von Swift würde die Eigenschaft sein:

pinView!.pinTintColor = .purple 

oder ...

pinView!.pinTintColor = MKPinAnnotationView.purplePinColor() 

https://developer.apple.com/reference/mapkit/mkpinannotationview

+0

ich diese Änderung versucht, aber es funktioniert immer noch nicht. Ich habe herausgefunden, dass viewForAnnotation aufgrund von print-Anweisungen nicht aufgerufen wird - daher das Problem. irgendwelche Ideen, warum es nicht genannt wird? –

+0

Möglicherweise müssen Sie es aktivieren (z. B. mapView.view (für: Annotation)?. IsEnabled = aktiviert') ... –

Verwandte Themen