1

MKCirclesMapKitを使ってたくさん表示しようとしています。MKCircle <MKOverlay>これまでのところ、Circle というクラスを拡張してきました。circleView という読み取り専用のプロパティがあります。ゲッターで、MKCircleView.

-(MKCircleView *)circleView {
    if(!_circleView){
        _circleView = [[MKCircleView alloc] initWithOverlay:self];

        [_circleView setFillColor:self.color];
    }

    return _circleView;
}

次に、マップで次のようにします。

- (MKOverlayView *)mapView:(MKMapView *)mapView 
            viewForOverlay:(id<MKOverlay>)overlay {
   if ([overlay isKindOfClass:Circle.class]) {
       Circle *region = overlay;

       return [region circleView];
    }

    return nil;
}

これらのサークルをサーバーから読み込んでいますが、複数のサークル (1 つの地域に 1k を超える表示) を持つことができます。

UIの反応が悪い気がします。サーバーからのキャッシュに円がある場合でも、それらを再描画するのに時間がかかり、領域を移動するのは苦痛になる可能性があります。このパフォーマンスを改善する方法はありますか?

編集

必要な数の円を表示していることを発見しましたが、それでも非常に遅いです。

4

1 に答える 1

0

UI と描画速度に影響するだけでなく、マップ上に多くのオーバーレイをプロットすると、実際のデバイスでメモリの問題が発生します。これは、MapKit によるオーバーレイの再利用ではないためです。注釈には がありますがreuseWithIdentifier、オーバーレイにはありません。MKOverlayView各オーバーレイは、オーバーレイを含むマップ上にとして新しいレイヤーを作成します。そのようにして、メモリ使用量が非常に速くなり、スクロールが遅くなります...ほとんど不可能に遅いとしましょう.

したがって、回避策があります。各オーバーレイを個別にプロットする代わりに、すべてのMKOverlays(この場合はMKCircles) を 1 つに追加できますMKOverlayView。この方法では、実際には 1 つしか作成していないため、再利用MKOverlayViewする必要はありません。

この質問の回答には回避策が含まれています。

複数の MKPolygons でこのアプローチを使用しましたが、うまく機能します。

于 2013-07-14T20:27:41.463 に答える