2015-08-27 3 views
2

Я хочу получить направление между двумя точками и нарисовать их в MKMapView. Это моя реализация:iOS Swift Направление между двумя точками и чертежом на карту

Во-первых, при viewDidLoad обратного вызова моего контроллера я установить вид делегата карты можно на себя

map.delegate = self 

Тогда я прошу всех маршрутов:

func showDirections() { 
     let currentPlace: MKPlacemark = MKPlacemark(coordinate: location.coordinate, addressDictionary: nil) 
     let place: MKPlacemark = MKPlacemark(coordinate: annotation.coordinate, addressDictionary: nil) 



    println(currentPlace.coordinate.latitude) 
    println(currentPlace.coordinate.longitude) 
    println(place.coordinate.latitude) 
    println(place.coordinate.longitude) 

    var request: MKDirectionsRequest = MKDirectionsRequest.new() 
    request.setSource(MKMapItem(placemark: currentPlace)) 
    request.setDestination(MKMapItem(placemark: place)) 
    request.transportType = MKDirectionsTransportType.Any 
    request.requestsAlternateRoutes = true 
    var directions: MKDirections = MKDirections(request: request) 
    directions.calculateDirectionsWithCompletionHandler() { 
     (response, error) in 
     println(error) 
     if(error == nil && response != nil) { 
      println("Numero de rutas: " + String(response.routes.count)) 
      println(response.routes[0].coordinate) 
      for(var i = 0;i < response.routes.count; i++) { 
       self.map.addOverlays(response.routes[i].overlays, level: MKOverlayLevel.AboveRoads) 
       self.map.setNeedsDisplay() 
      } 
      for r in response.routes { println("route = \(r)") } 
     } 
    } 

} 

И реализовать эти две функции обратного вызова тоже:

func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! { 
     println("redenrerForOverlay") 
     if(overlay.isKindOfClass(MKPolyline)) { 
      var renderer: MKPolylineRenderer = MKPolylineRenderer(overlay: overlay) 
      renderer.strokeColor = Colors.psnGreen 
      renderer.lineWidth = 5 
      return renderer 
     } 
     return nil 
    } 

func mapView(mapView: MKMapView!, viewForOverlay overlay: MKOverlay!) -> MKOverlayView! { 
     println("ViewForOverlay") 
     if (overlay.isKindOfClass(MKPolyline)) { 
      var lineView: MKPolylineView = MKPolylineView(overlay: overlay) 
      lineView.backgroundColor = Colors.psnGreen 

      return lineView; 
     } 
     return nil; 
    } 

Когда я запускаю свое приложение, я получаю два маршрута для рисования, но когда я вызываю map.addOverlay, ничего не происходит. Мой rendererForOverlay/viewForOverlay никогда не вызывается. Somenone знает, как заставить его работать?

Заранее спасибо

ответ

2

Я finnaly получил решение

Для тех, кто заинтересован, только изменить направления обратного вызова для этого:

directions.calculateDirectionsWithCompletionHandler() { 
      (response, error) in 
      if(error == nil && response != nil) { 
       for route in response.routes { 
        var r: MKRoute = route as! MKRoute 
        self.map.addOverlay(r.polyline, level: MKOverlayLevel.AboveRoads) 
       } 
      } 
     } 
+0

вар lineView: MKPolylineView = MKPolylineView (наложение: наложения) Вы уверены в этой строке. Не работает в swift 2.0 –

 Смежные вопросы

  • Нет связанных вопросов^_^