iOS 8 SDK, Swift, MapKit Рисование маршрута

Мне нужно нарисовать маршрут между двумя точками, и я использую MKDirectionsRequest для своей цели.

Получение маршрута — это нормально, но у меня проблемы с его рисованием.

В iOS 8 SDK нет функции

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 

Есть только этот:

func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer!

И по какой-то причине я не могу понять, почему этот метод не вызывается.
Задан делегат для MapView и импортирован MapKit.


Вот реализованная функция rendererForOverlay:

func rendererForOverlay(overlay: MKOverlay!) -> MKOverlayRenderer! {
    println("rendererForOverlay");

    var overlayRenderer : MKOverlayRenderer = MKOverlayRenderer(overlay: overlay);

    var overlayView : MKPolylineRenderer = MKPolylineRenderer(overlay: overlay);
    view.backgroundColor = UIColor.blueColor().colorWithAlphaComponent(0.5);

    return overlayView;
}



person esphynox    schedule 28.08.2014    source источник
comment
В SO лучше включить хотя бы часть соответствующего кода в сам вопрос, а не просто ссылку.   -  person    schedule 28.08.2014


Ответы (1)


Представление карты не вызывает ваш метод rendererForOverlay, потому что он неправильно назван.

Метод должен быть назван точно:

mapView(mapView:rendererForOverlay)

но в вашем коде он называется:

rendererForOverlay(overlay:)


Кроме того, вы должны проверить, что тип аргумента overlay равен MKPolyline, и установить strokeColor средства визуализации полилиний.

(view.backgroundColor в существующем коде фактически меняет цвет фона view контроллера представления, а не полилинии.)

Пример:

func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
    println("rendererForOverlay");

    if (overlay is MKPolyline) {
        var pr = MKPolylineRenderer(overlay: overlay);
        pr.strokeColor = UIColor.blueColor().colorWithAlphaComponent(0.5);
        pr.lineWidth = 5;
        return pr;
    }

    return nil
}
person Community    schedule 28.08.2014