2015-03-26 2 views
5

У меня есть следующий код в Swift, чтобы добавить MKPolyline в MapView. XCode не говорит мне, что есть проблема, и, насколько я читал, это должно работать.MKPolyLine не отображается в MapView в Swift

Выход для MapView:

@IBOutlet weak var mapView: MKMapView! 

Переменная для хранения координаты:

var coordinates: [CLLocationCoordinate2D] = [] 

Получить мои сохраненные координаты из основных данных:

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] 

Добавить координаты из основных данных к моему новому массиву:

Создать полилинию:

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

Добавить оверлей:

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

Добавьте его в 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 
} 

я просто получаю пустой MapView. Я могу напечатать массив координат на консоли, поэтому я знаю, что данные были добавлены. Есть идеи?

+0

Соответствует ли ваш ViewController к 'протоколу MKMapViewDelegate'? – zisoft

+0

Отправляется ли выход делегата карты на контроллер вида? После addOverlay делает self.mapView.overlays.count say 1? Вызывается ли метод rendererForOverlay (ставьте точку останова или println)? Являются ли координаты действительными/обратными (это происходит)? Несвязанный, но не должен 'для индекса в 1 .. <' быть 'для индекса в 0 .. <'? – Anna

+0

Спасибо. Анна, я добавил точку останова, и кажется, что ее не называют. Может быть, глупый вопрос, но как я могу это разрешить? Я уверен, что это просто. Что касается индекса в 1 комментарий, это давало мне ошибку, когда у меня было 0 до этого - теперь, похоже, работает с 1. –

ответ

6

Как написано в комментариях, код в вопросе был в порядке. Я просто не назначал делегата.

mapView.delegate = self 
5

выше метод будет написано, как это в 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() 
    } 
Смежные вопросы