膨大な量の注釈 (8000 以上) を含む MapView があります。すべての注釈が表示されているときにマップをスクロールすると、パフォーマンスが低下します。そのため、可視領域にあるときにいくつかの注釈を非表示にするという考えがありました。フォーラムでこのスレッドを見つけましたが、問題は解決しません。
このコードを書いて別の解決策を試しました
- (void)mapView:(MKMapView *)_mapView regionDidChangeAnimated:(BOOL)animated
{
NSSet *annoSet = [[NSSet alloc] initWithSet:[_mapView annotationsInMapRect:_mapView.visibleMapRect]];
NSMutableSet *annotationsSet = (NSMutableSet *)annoSet;
NSLog(@"Annos: %i", [annotationsSet count]);
if([annotationsSet count]>500)
{
for(MapViewAnnotation* annotation in annotationsSet)
{
[[_mapView viewForAnnotation:annotation] setHidden:YES];
}
}
}
これは機能しますが、その操作の後、mapView はほぼ完全に故障しています。何を改善できますか?
編集:
私の新しいコードは次のようになります。
- (void)mapView:(MKMapView *)_mapView regionDidChangeAnimated:(BOOL)animated
{
NSSet *annoSet = [[NSSet alloc] initWithSet:[_mapView annotationsInMapRect:_mapView.visibleMapRect]];
//NSMutableSet *annotationsSet = (NSMutableSet *)annoSet;
NSLog(@"Annos: %i", [annoSet count]);
if([annoSet count]>500)
{
for(MapViewAnnotation* annotation in annoSet)
{
[[_mapView viewForAnnotation:annotation] setHidden:YES];
}
}
else if([annoSet count] <= 500)
{
for(MapViewAnnotation* annotation in annoSet)
{
[[_mapView viewForAnnotation:annotation] setHidden:NO];
}
}
}
しかし、私はすべての注釈をvisibleRectに隠したくありません。効率的な方法でそれを行う方法はありますか?