2014-02-28 20 views
2

我目前正在研究地图功能(大部分代码是由其他人为此功能开发的)。MKMapView覆盖图在缩放操作后没有清晰地绘制

我们通过设置mkpolygon对象的数组来添加mkoverlays到地图。这些对象通过从后端接收到的jSon接收它们的多边形坐标。据我检查代码,我们并不是重写绘制方法。对象只能用它们的多边形初始化并添加到mapView中。

我们通过这种方式增加线和面的图,现在有两种行为不属于不错:

1)如果多边形覆盖被触摸,它们的颜色应该改变 - >但它非常非常2)如果地图放大/缩小,线条非常像并且不锐利 - 看起来很蹩脚

我的问题是,整个方法在这个用例中是错误的吗?

+0

也有这两个问题。据我所知,整个地图重绘,如果重叠渲染器设置为需要显示。渲染器被要求在界限之外绘制。仍在调查。 –

回答

0

我们的基于地图的应用程序也具有非常缓慢的叠加渲染和(间歇)边缘过度模糊。

好消息是,我找到了一个解决方案,看起来像是一个bug,导致性能提高了300%。我注意到渲染器被反复要求在覆盖范围之外绘制。所以,我只是增加了一个界限检查,我MKPolygonRenderer子类的这样的绘制方法:

- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context 
{ 
    if (!MKMapRectIntersectsRect([self.overlay boundingMapRect], mapRect)) { 
     return; 
    } 
    [super drawMapRect:mapRect zoomScale:zoomScale inContext:context]; 
} 

随着这一变化,我们从不到1提高每秒重绘每秒2个或3重绘。

+0

self.overlay包含什么,它只是1覆盖?什么是我们有一个覆盖数组ID?另外,谁调用drawMapRect?谢谢! –

+0

@VanDuTran这些是Apple的'MKOverlayRenderer'类的API,所以我不确定我是否理解这个问题。 'overlay'属性的类型为'id '。所以,不,它不是一个数组。并且'drawMapRect'被内部Apple代码调用。你可以看看[示例项目](https://dl.dropboxusercontent.com/u/2183704/Map%20Overlay%20Pared%20Down.zip)我发送了苹果,如果它有帮助 –

+0

我的意思是,当API是否刷新重叠?什么时候调用“rendererForOverlays”?我没有得到drawMapRect和rendererForOverlay之间的关系 –