2015-03-26 13 views
5

Mam następujący kod w Swift, aby dodać MKPolyline do MapView. XCode nie mówi mi, że jest problem, i o ile przeczytałem, to powinno działać.MKPolyLine nie pojawia się na MapView w Swift

Outlet dla MapView:

@IBOutlet weak var mapView: MKMapView! 

Zmienna do przechowywania współrzędne:

var coordinates: [CLLocationCoordinate2D] = [] 

dostać moje zapisane współrzędne z danych Core:

var contextMap = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext! 
var requestMap = NSFetchRequest(entityName: "Locations") 
let predMap = NSPredicate(format: "game = %d", passedGameNumber) 
requestMap.predicate = predMap 
requestMap.sortDescriptors = [NSSortDescriptor(key:"time", ascending: false)] 
    self.locationsList = contextMap.executeFetchRequest(requestMap, error: nil)! as [Locations] 

Dodaj współrzędnych z danych Core do mojej nowej tablicy:

Tworzenie polilinii:

var polyLine = MKPolyline(coordinates: &coordinates, count: coordinates.count) 

Dodaj nakładkę:

self.mapView.addOverlay(polyLine, level: MKOverlayLevel.AboveRoads) 

Dodaj go do MapView:

func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! { 
    if overlay.isKindOfClass(MKPolyline) { 
     // draw the track 
     let polyLine = overlay 
     let polyLineRenderer = MKPolylineRenderer(overlay: polyLine) 
     polyLineRenderer.strokeColor = UIColor.blueColor() 
     polyLineRenderer.lineWidth = 2.0 

     return polyLineRenderer 
    } 

    return nil 
} 

po prostu dostać pusty MapView. Mogę wydrukować tablicę współrzędnych do konsoli, więc wiem, że dane zostały dodane. Jakieś pomysły?

+0

Czy Twój viewController zgodne z protokołem MKMapViewDelegate' '? – zisoft

+0

Czy wylot przedstawicielski widoku mapy jest podłączony do kontrolera widoku? Po addOverlay, czy self.mapView.overlays.count mówi 1? Czy metoda rendererForOverlay jest wywoływana (wstawić tam punkt przerwania lub println)? Czy współrzędne są prawidłowe/cofnięte (tak się dzieje)? Niepowiązane, ale nie powinno "dla indeksu w 1 .. <' być 'dla indeksu w 0 .. <'? – Anna

+0

Dziękuję. Anna, dodałem punkt przerwania i wygląda na to, że nie jest on wywoływany. Może to głupie pytanie, ale jak mogę to rozwiązać? Jestem pewien, że to proste. Jeśli chodzi o indeks w 1 komentarzu, to dawał mi błąd, gdy miałem tam już 0 - to teraz wydaje się pracować z 1. –

Odpowiedz

6

Jak podano w komentarzach, kod w pytaniu był w porządku. Po prostu nie wyznaczałem delegata.

mapView.delegate = self 
5

Powyższa metoda będzie napisane tak w Swift3:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer { 
     if overlay.isKind(of: MKPolyline.self) { 
      // draw the track 
      let polyLine = overlay 
      let polyLineRenderer = MKPolylineRenderer(overlay: polyLine) 
      polyLineRenderer.strokeColor = UIColor.blue 
      polyLineRenderer.lineWidth = 2.0 

      return polyLineRenderer 
     } 

     return MKPolylineRenderer() 
    } 
Powiązane problemy