Загрузить аннотации для видимой области в MKMapView
У меня около 400 MKAnnotationView, которые одновременно загружаются в MKMapView.
Я понимаю, что это нехорошо, это немного медленнее, и я хочу сделать это "правильным" способом.
Я масштабирую карту по координате центра:
MKCoordinateSpan span;
span.latitudeDelta = 0.8;
span.longitudeDelta = 0.8;
MKCoordinateRegion region;
region.span = span;
region.center = self.selectedCounty.coordinate;
[mapView setRegion:region animated:TRUE];
Я хочу только загрузить аннотации, которые могут быть видны в этом регионе.
У меня есть обычная MKAnnotation, называемая просто "Annotation" с CLLocationCoordinate2D- и title-property.
Я просто хочу загрузить аннотацию для "видимой области" в MKMapView, поэтому не все аннотации загружаются одновременно. И когда меняется "видимая область" на MKMapView, я, конечно, хочу загрузить аннотации для этой области.
Я знаю, что MKMapView имеет метод делегата, который выполняется при изменении области.
Но как узнать, какие аннотации я должен загрузить для этого региона?
Ответы
Ответ 1
Вы можете получить область области карты и центр, и в зависимости от местоположения аннотаций вы можете проверить, существует ли какая-либо аннотация внутри этого региона... возможно, она реализована уже в виде [mapview isAnnotationVisible]... но вам придется в любой момент проверить всех аннотаций...
Ответ 2
MKMapRect visibleMapRect = mapView.visibleMapRect;
NSSet *visibleAnnotations = [mapView annotationsInMapRect:visibleMapRect];
Ответ 3
http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MapKitFunctionsReference/Reference/reference.html
MKMapRectContainsPoint скажет вам, видно ли это.
visibleCount = 0;
for (MyAnnotation *annotation in mapView.annotations) {
if (MKMapRectContainsPoint(mapView.visibleMapRect, MKMapPointForCoordinate(annotation.coordinate)))
{
visibleCount++;
}
}
Я рекомендую сделать этот метод в фоновом потоке, если у вас много аннотаций. но вы можете определить, видна ли она на карте