【问题标题】:Changing color of an MKOverlay that has already been added to a mapview更改已添加到地图视图的 MKOverlay 的颜色
【发布时间】:2011-09-11 06:39:41
【问题描述】:

我有一些 MKOverlays(实际上它们是 MKPolygons),它们会在地图显示后立即加载。我想动态改变它们的颜色。我能看到这样做的唯一方法是删除覆盖层,然后用新颜色将其添加回来。有没有更好的方法在现有的叠加层上执行此操作?

我是 Objective-c/xcode/ios 的新手...所以请温柔:)

【问题讨论】:

    标签: objective-c ios4 xcode4 mapkit


    【解决方案1】:

    您的 mapView 有一种方法可以获取给定叠加层的渲染器对象。然后,您可以使用渲染器来更改叠加层的颜色。

    if let renderer = mapView.rendererForOverlay(overlay) as? MKPolygonRenderer {
        renderer.fillColor = UIColor.redColor()
    }
    

    如果您不是在寻找 MKPolygon 叠加层,请忽略对 MKPolygonRenderer 的可选转换。

    (我意识到这是一个相当老的问题,但我只是偶然发现了它并找到了我的解决方案?)

    【讨论】:

    • 这是正确的答案,因为我相信iOS 7+
    【解决方案2】:

    重要的是要记住,许多 MapKit 都有不同的对象(MKPolygon、MKCircle、MKShape)来保存与绘制视图相关的数据(MKPolygonView、MKCircleView、MKOverlayView 等)。在许多情况下,您希望获得参考到视图对象,以便您可以设置背景颜色。即

    MKOverlayView *anOverlay;  //You need to set this view to the object you are interested in
    anOverlay.backgroundColor = [UIColor redColor]; 
    [anOverlay setNeedsDisplay];
    

    如果你的对象是一个 MKPolygon,你应该确定它被绘制到的 MKPolygonView,然后设置 fillColor 属性并通过调用 setNeedsDisplay 重绘对象:

    MKPolygonView *theView;
    theView.fillColor = [UIColor redColor];
    [theView setNeedsDisplay];
    

    【讨论】:

    • 效果很好!谢谢芯片!请继续关注,因为我将来会有很多 ios noob 问题:)
    猜你喜欢
    • 2014-12-24
    • 2018-07-14
    • 2014-10-25
    • 1970-01-01
    • 2019-07-25
    • 2022-07-19
    • 1970-01-01
    • 2020-06-11
    • 2020-05-20
    相关资源
    最近更新 更多