【发布时间】:2012-02-16 23:10:17
【问题描述】:
当我使用 MKOverlays 绘制路径(有时使用 5000 多个单独的 MKPolylines)时,要等待很长时间才能绘制所有覆盖,并且每次将地图视图滚动到新区域时,覆盖必须绘制该区域,并且还有另一个明显的冻结。
我的困境是我有两组代码,它们都正确地绘制了路径。第一个将路径绘制为一条长线,并且绘制速度非常快。第二个将每个线段绘制为单独的线,并且需要很长时间。
现在,我为什么还要考虑第二种方式?因为我必须分析每条线以查看该线应该是什么颜色。例如,如果线条的title 属性为“red”,那么我将线条设为红色,但如果它是“blue”,则线条为蓝色。使用第一种技术,这种特异性是不可能的(据我所知,但也许其他人知道不同?)因为路径只是一条大线,并且访问每个单独的段是不可能的。第二种方法很容易,但需要很长时间。
这是我的两组代码:
第一种方式(速度快但无法访问个别细分市场):
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];
我的问题是:我能否通过第二种方式为我提供的对每一行的控制来获得第一种方式的性能?
【问题讨论】:
标签: objective-c ios performance mapkit mkoverlay