4

MKMapView を使用しています... マップに大量の注釈を追加しているため、マップの動きが遅くなります。ズームレベルで注釈を表示/非表示にしたい。各ズームで、重複する注釈を非表示にしたいと考えています。解決策はありますか?

これまでのところ、重なりがある場合は、重なり合っている注釈の境界矩形を比較し、注釈を削除することを思いつきました。すべてのものをすべてのものと比較する必要があるため(私は知っています、木などを使用できます...)、次に、注釈を削除してマップに戻すのが少し遅いため、このソリューションは遅くなります。

良いことは、アノテーションのレンダリングにアクセスできることです。アノテーションがレンダリングされている場合は、それが可能かどうかを確認してください...できますか?

ありがとう

4

2 に答える 2

3

次のコードを使用できます

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {

    NSArray *annotations = [mapView annotations];
    //NSLog(@"%@",annotations);
    CustomAnnotation *annotation = nil;
    for (int i=0; i<[annotations count]; i++) {
        annotation = (CustomAnnotation*)[annotations objectAtIndex:i];
        if (![annotation isKindOfClass:[MKUserLocation class]]) {

            if (mapView.region.span.latitudeDelta <= 0.13f) {
                [[mapView viewForAnnotation:annotation] setHidden:NO];
            } else {
                [[mapView viewForAnnotation:annotation] setHidden:YES];
            }

        }
    }

}

より快適にするために、if条件でデルタを調整できます

于 2013-02-21T04:51:55.060 に答える