地图视图上的虚线

16

我可以使用下面的代码(部分代码)轻松创建两个点之间的连线,但如何将直线变成虚线呢?另外,是否可能使线条透明度随着长度的增加而改变呢?

- (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个回答

51
您可以使用lineDashPattern 属性创建所需的线型样式。 MKPolylineRendererMKOverlayPathRenderer的子类,具有该属性和其他一些属性(请参阅文档链接)。
例如,以下代码将模式设置为2个点长的线,后跟5个点的间隔。整个折线的长度都会重复此模式。
renderer.lineDashPattern = @[@2, @5];

对于不透明度,您可以在strokeColor上应用alpha值:
renderer.strokeColor = [[UIColor orangeColor] colorWithAlphaComponent:0.5];

或者设置 alpha 属性:

renderer.alpha = 0.5;

不确定你在问题中所说的“线条越长”是什么意思。


Anna,感谢你的帮助。那很有道理。关于“更长的线”,我想知道是否可以在线条本身内将alpha值从1更改为0.1。例如,起点可能是alpha值为1,而终点可能是0.1。 - jdross
沿着线变化alpha值将形成一种渐变效果,不幸的是这种能力并未集成在标准渲染器中。你需要创建一个自定义覆盖渲染器,并手动进行绘制。如果你想要追求这条路,可以参考这个这个来帮助你入门。 - user467105
很好的解释,@Anna。 - Jamal Zafar
@Anna 很棒的回答..但是如果我需要第一个破折号小一点,第二个破折号长一点,并且行重复这种模式呢? - LC 웃
我找到了它 polylineRenderer.lineDashPattern = [5,10,2,10] - LC 웃

9

用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


2
说实话...这算是一个答案吗?这只是一行代码,我不认为有人会要求将其转换为Swift。 - TheTiger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接