我目前正在制作地图功能(大部分代码都是由其他人为此功能开发的。)
我们通过设置mkpolygon对象数组将mkoverlays添加到地图中。这些对象通过从后端接收的jSon接收其多边形坐标。据我检查代码,我们没有覆盖绘制方法。这些对象仅使用其多边形进行初始化并添加到mapView。
我们正在通过这种方法向地图添加线条和多边形,现在有两种行为并不好:
1)如果触摸多边形覆盖,则应更改其颜色 - >但它非常慢 2)如果地图放大/缩小,线条非常像,不锋利 - 看起来很蹩脚
我的问题是,这个用例的整个方法是错误的吗?
答案 0 :(得分:0)
我们基于地图的应用程序还具有非常慢的叠加渲染和(间歇性)边缘过度模糊。
好消息是我找到了一个解决方法,看起来像是一个bug,导致性能提高了300%。我注意到渲染器被反复要求在叠加边界之外绘制。所以我只是在我的MKPolygonRenderer
子类的draw方法中添加了一个边界检查,如下所示:
- (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次重绘。