Загрузка аннотаций для видимой области в MKMapView - PullRequest
14 голосов
/ 08 ноября 2010

У меня есть около 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, называемая просто «Аннотация» с CLLocationCoordinate2D- и title-свойством.

Я просто хочу загрузить аннотацию для «видимой области» в MKMapView, чтобы не все аннотации загружались одновременно. И когда «видимая область» в MKMapView изменяется, я, конечно, хочу загрузить аннотации для этой области.

Я знаю, что в MKMapView есть метод делегата, который запускается при изменении региона.

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

Ответы [ 3 ]

36 голосов
/ 04 декабря 2012
MKMapRect visibleMapRect = mapView.visibleMapRect;
NSSet *visibleAnnotations = [mapView annotationsInMapRect:visibleMapRect];
21 голосов
/ 24 мая 2011

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++;
    }
}

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

0 голосов
/ 10 ноября 2010

Вы можете получить диапазон и центр области карты, а также на основе расположения аннотаций, которые вы можете проверить, если какие-либо аннотации находятся внутри этого региона ... возможно, это уже реализовано в чем-то вроде [mapview isAnnotationVisible] ...в конце концов, вам придется проверить все аннотации ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...