MKOverlays (場合によっては 5000 以上の個別の MKPolylines) でパスを描画すると、すべてのオーバーレイが描画されるまで非常に長い時間がかかり、マップ ビューが新しい領域にスクロールされるたびに、その領域のオーバーレイが描画する必要があり、別の顕著なフリーズアップがあります。
私のジレンマは、パスを正しく描画する 2 つのコード セットがあることです。1 つ目はパスを 1 本の長い線として描画し、非常に高速に描画します。2 つ目は、各線分を個別の線として描画するため、長い時間がかかります。
さて、なぜ私は2番目の方法を検討するのでしょうか? 個々の線を分析して、線の色を確認する必要があるためです。たとえば、線のtitle
プロパティが「赤」の場合は線を赤にしますが、「青」の場合は線を青にします。最初の手法では、パスが 1 本の大きな線にすぎず、個々のセグメントにアクセスできないため、この種の特異性は不可能です (私の知る限りでは、他の誰かが別の方法で知っているのではないでしょうか?)。2 番目の方法は簡単ですが、時間がかかります。
これが私の2セットのコードです:
最初の方法 (高速ですが、個々のセグメントにアクセスできません):
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];
2番目の方法(遅いですが、特定の色で各線を描くことができます):
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];
私の質問は次のとおりです。2 番目の方法で提供される各行を制御して、最初の方法のパフォーマンスを得ることができますか?