地图视图上的虚线

jdr*_*oss 13 objective-c mapkit ios mkpolyline

我可以使用下面的代码(无论如何它的一部分)在两点之间创建一条线,我怎样才能使线条点缀而不是实线?也可以在线条越长的时候改变不透明度?

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

    return renderer;
}
Run Code Online (Sandbox Code Playgroud)

小智 47

您可以使用该lineDashPattern属性为线条创建所需的图案.

MKPolylineRenderer是一个子类,MKOverlayPathRenderer其中包含该属性和其他一些属性(请参阅文档的链接).

例如,这将模式设置为2点长的行,然后是5点间隙.在折线的整个长度上重复该图案.

renderer.lineDashPattern = @[@2, @5];
Run Code Online (Sandbox Code Playgroud)


对于不透明度,您可以将alpha应用于strokeColor:

renderer.strokeColor = [[UIColor orangeColor] colorWithAlphaComponent:0.5];
Run Code Online (Sandbox Code Playgroud)

或设置alpha属性:

renderer.alpha = 0.5;
Run Code Online (Sandbox Code Playgroud)

不确定你的意思是"线越长"这个问题的一部分.


Abi*_*aby 6

用 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
} 
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 老实说......这应该是一个答案吗?这只是一行,我认为没有人会要求快速转换它。 (2认同)