5

iOS でマップに注釈を追加する際にパフォーマンス上の問題があります (標準のマップキット メソッドを使用するため、Apple マップを使用します)。メソッドを使用して、大量の注釈 (10000 以上) を一括で追加しようとしてい(void)addAnnotations:(NSArray *)annotationsます。注釈オブジェクトは特別なものではなくMKAnnotation、次のように定義されたコンストラクタのみで実装される非常に基本的なクラスです。

- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d {
    if(self = [super init]) {
        title = ttl;
        coordinate = c2d;
    }

    return self;
}

テストするために、読み込み時に基本的なマップ ビューに注釈を追加するだけの基本的なアプリを作成しました。iPad 2 で約 6 ~ 7 秒かかります。非常に許容できるパフォーマンスです。ただし、同じ基本的なマップ ビューを独自のアプリケーションに埋め込むと、事態は複雑になります。まったく同じロジックですが、アプリで実行すると、すべての注釈を読み込むのに約 50 秒かかります。

私のアプリには、互いにたくさんのビューがあります。問題を特定するために、マップ ビューを最下位レベルから最上位レベルに到達するまで埋め込み始めました。各ステップでプロファイリングを行って、パフォーマンスに役立つかどうかを確認しましたが、結果は表示されません。まだ約 50 秒です。現在、私のアプリは基本的に、注釈を読み込んで最上位のレベル マップ ビューのみに追加するだけで、理想的にはスタンドアロン アプリと同じですが、なんらかの理由で注釈のレンダリングに約 50 秒かかっています。私が持っている唯一の合理的な説明は、マップのパフォーマンスを何らかの形で妨げるアプリ設定の一部に関するものです. 私は役に立たない解決策を考え出すためにたくさんの読書をしました。

ここで何が問題なのか、誰にもアイデアはありますか? ありがとう!

4

1 に答える 1

1

実際の「問題」はありません。つまり、アプリケーションのパフォーマンスに実際に影響を与えている 10000 を超える割り当て、描画、およびレンダリングがあります。

私の提案は、地図上のユーザー ナビゲーションを傍受することです。のようなものを使用[mapView visibleMapRect]して、画面上のマップの表示部分を取得します。四角形の座標を取得し (少し大きいので、マップを移動するときにユーザーが気付かない可能性があります)、その四角形内の注釈のみを読み込みます。

ユーザーが移動すると、新しい四角形内にある注釈から前の四角形に既にロードされた注釈を差し引いたものをロードするだけで済みます。注釈が画面の外に出たときに、注釈を削除することもできると思います。

これは、スクロール ビューを処理するときに Apple が推奨する方法に少し似ています。ユーザーがスクロールビューの前のセクションと次のセクションのコンテンツをロードする (および前の 1 ビューのコンテンツを解放する) 必要があるアプリケーションを覚えています。 .

ユーザーが何を見ているかを考え、その部分 (または MKMapView 専門用語で呼ばれる領域) に関係のある注釈のみを表示するようにしてください。そうすれば、アプリの応答性がすぐに改善されると思います。

于 2013-02-15T11:29:11.207 に答える