【发布时间】:2011-09-11 06:39:41
【问题描述】:
我有一些 MKOverlays(实际上它们是 MKPolygons),它们会在地图显示后立即加载。我想动态改变它们的颜色。我能看到这样做的唯一方法是删除覆盖层,然后用新颜色将其添加回来。有没有更好的方法在现有的叠加层上执行此操作?
我是 Objective-c/xcode/ios 的新手...所以请温柔:)
【问题讨论】:
标签: objective-c ios4 xcode4 mapkit
我有一些 MKOverlays(实际上它们是 MKPolygons),它们会在地图显示后立即加载。我想动态改变它们的颜色。我能看到这样做的唯一方法是删除覆盖层,然后用新颜色将其添加回来。有没有更好的方法在现有的叠加层上执行此操作?
我是 Objective-c/xcode/ios 的新手...所以请温柔:)
【问题讨论】:
标签: objective-c ios4 xcode4 mapkit
您的 mapView 有一种方法可以获取给定叠加层的渲染器对象。然后,您可以使用渲染器来更改叠加层的颜色。
if let renderer = mapView.rendererForOverlay(overlay) as? MKPolygonRenderer {
renderer.fillColor = UIColor.redColor()
}
如果您不是在寻找 MKPolygon 叠加层,请忽略对 MKPolygonRenderer 的可选转换。
(我意识到这是一个相当老的问题,但我只是偶然发现了它并找到了我的解决方案?)
【讨论】:
重要的是要记住,许多 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];
【讨论】: