Когда я рисую путь с помощью 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];
Мой вопрос: могу ли я получить производительность первого способа сконтроль над каждой линией, что мне предоставляет второй способ?