1

当我使用 MKOverlays(有时使用 5000 多个单独的 MKPolylines)绘制路径时,要等待很长时间才能绘制所有叠加层,并且每次将地图视图滚动到新区域时,该区域的叠加层都有被绘制,并且还有另一个明显的冻结。

我的困境是我有两组代码,它们都正确地绘制了路径。第一个将路径绘制为一条长线,并且绘制速度非常快。第二个将每个线段绘制为单独的线,并且需要很长时间。

现在,我为什么还要考虑第二种方式?因为我必须分析每条线以查看该线应该是什么颜色。例如,如果线条的title属性是“红色”,那么我将线条设为红色,但如果它是“蓝色”,则将线条设为蓝色。使用第一种技术,这种特异性是不可能的(据我所知,但也许其他人知道不同?)因为路径只是一条大线,并且访问每个单独的段是不可能的。第二种方法很容易,但需要很长时间。

这是我的两组代码:

第一种方式(快速但无法访问单个段):

CLLocationCoordinate2D coords[sizeOverlayLat];

for(int iii = 0; iii < sizeOverlayLat; iii++) {
    coords[iii].latitude = [[overlayLat objectAtIndex:iii] doubleValue];
    coords[iii].longitude = [[overlayLong objectAtIndex:iii] doubleValue];
}

MKPolyline* line = [MKPolyline polylineWithCoordinates:coords count:sizeOverlayLat];

[mapViewGlobal addOverlay:line];

第二种方式(慢,但我可以用特定颜色绘制每条线):

NSMutableArray* lines = [NSMutableArray new];

for(int idx = 1; idx < sizeOverlayLat; idx++) {
    CLLocationCoordinate2D coords[2];
    coords[0].latitude = [[overlayLat objectAtIndex:(idx - 1)] doubleValue];
    coords[0].longitude = [[overlayLong objectAtIndex:(idx - 1)] doubleValue];

    coords[1].latitude = [[overlayLat objectAtIndex:idx] doubleValue];
    coords[1].longitude = [[overlayLong objectAtIndex:idx] doubleValue];

    MKPolyline* line = [MKPolyline polylineWithCoordinates:coords count:2];
    [line setTitle:[overlayColors objectAtIndex:idx]];
    [lines addObject:line];
}

[mapViewGlobal addOverlays:lines];

我的问题是:我可以通过第二种方式为我提供的对每条线路的控制来获得第一种方式的性能吗?

4

1 回答 1

2

您绝对可以获得这样的性能,但您可能需要创建自己的叠加视图。

在该视图中,您可以通过重复调用来绘制折线CGAddLineToPoint,同时使用 跳过部分CGMoveToPoint。对每种颜色分别执行此操作,您就完成了。因此,如果您有 2 种颜色(红色+蓝色),您将在多边形中循环两次,首先绘制红色(跳过蓝色块),然后绘制蓝色(跳过红色块)。

于 2012-02-16T23:19:04.820 回答