【问题标题】:Dotted line on map view地图视图上的虚线
【发布时间】:2013-12-13 17:40:13
【问题描述】:

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

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

    return renderer;
}

【问题讨论】:

    标签: ios objective-c mapkit mkpolyline


    【解决方案1】:

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

    MKPolylineRendererMKOverlayPathRenderer 的子类,它具有该属性和其他一些属性(请参阅文档链接)。

    例如,这会将模式设置为 2 点长的线,后跟 5 点的间隙。该模式在折线的整个长度上重复。

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


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

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

    或设置alpha 属性:

    renderer.alpha = 0.5;
    

    不确定问题的“行越长”是什么意思。

    【讨论】:

    • 安娜,感谢您的帮助。这就说得通了。关于“更长的线”,我想知道是否可以在线本身内将 alpha 值从 1 更改为 .1。例如,起点是 1 的 alpha 值,终点可能是 .1
    • 沿线改变 alpha 将是一个渐变,不幸的是,标准渲染器中没有内置该功能。您必须创建一个自定义叠加渲染器并手动进行绘图。如果您想走这条路,Thisthis 可以帮助您入门。
    • 很好的解释@Anna
    • @Anna 很好的答案..但是如果我需要第一个破折号变小,第二个破折号更长并且线条重复这种模式怎么办?
    • 我找到了 polylineRenderer.lineDashPattern = [5,10,2,10]
    【解决方案2】:

    用 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
    } 
    

    【讨论】:

    • 老实说......这应该是一个答案吗?这只是一行,我认为没有人会要求将其快速转换。
    猜你喜欢
    • 2017-12-06
    • 2015-09-14
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多