Подтвердить что ты не робот

Загрузить аннотации для видимой области в 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 имеет метод делегата, который выполняется при изменении области.

Но как узнать, какие аннотации я должен загрузить для этого региона?

4b9b3361

Ответ 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++;
    }
}

Я рекомендую сделать этот метод в фоновом потоке, если у вас много аннотаций. но вы можете определить, видна ли она на карте