Пунктирная линия на карте

Я могу создать линию между двумя точками довольно легко с помощью приведенного ниже кода (часть его в любом случае) как я могу сделать линию пунктирной вместо сплошной? Также можно ли изменить непрозрачность, чем длиннее линия?

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id < MKOverlay >)overlay
{
    MKPolylineRenderer *renderer =[[MKPolylineRenderer alloc] initWithPolyline:overlay];
    renderer.strokeColor = [UIColor orangeColor];
    renderer.lineWidth = 3.0;

    return renderer;
}

2 ответов


можно использовать lineDashPattern свойство для создания шаблона, который вы хотите для линии.

MKPolylineRenderer является наследником MKOverlayPathRenderer который имеет это свойство и несколько других (см. ссылку на документацию).

например, это устанавливает шаблон на линию длиной 2 точки, за которой следует разрыв в 5 точек. Рисунок повторяется по всей длине полилинии.

renderer.lineDashPattern = @[@2, @5];


Для непрозрачности, вы можете либо применить Альфа the strokeColor:

renderer.strokeColor = [[UIColor orangeColor] colorWithAlphaComponent:0.5];

и выберите alpha свойства:

renderer.alpha = 0.5;

не уверен, что вы подразумеваете под "управлять" часть вопроса.


ответ в Swift

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    guard let polyline = overlay as? MKPolyline else {
        fatalError("Not a MKPolyline")
    }

    let renderer = MKPolylineRenderer(polyline: polyline)

    renderer.strokeColor = #colorLiteral(red: 0.1764705926, green: 0.4980392158, blue: 0.7568627596, alpha: 1)
    renderer.lineWidth = 8
    renderer.lineDashPattern = [0, 10]

    return renderer
} 

enter image description here