2011-12-30 4 views
7

Я заметил, что если я использую MKMapView selectAnnotation:animated:, он будет прокручивать мою карту с экрана, если MKAnnotation не отображается в текущем MKCoordinateRegion, отображаемом моей картой.Как проверить, доступна ли MKnnotation в MKCoordinateRegion

Есть ли тривиальный способ проверить, находится ли аннотация в настоящее время на экране в пределах указанного MKCoordinateRegion? Я хотел бы иметь возможность выбирать аннотацию, которая доступна только на экране, а не что-то вне экрана.

ответ

24

Используйте метод annotationsInMapRect: в классе MKMapView. Он возвращает NSSet всех объектов аннотации, которые видны в данном прямоугольном прямоугольнике. Используйте метод containsObject:NSSet, чтобы проверить, присутствует ли аннотация в этом наборе видимых аннотаций.

MKMapRect visibleMapRect = aMapView.visibleMapRect; 
NSSet *visibleAnnotations = [aMapView annotationsInMapRect:visibleMapRect]; 
BOOL annotationIsVisible = [visibleAnnotations containsObject:someAnnotation]; 

Также visibleMapRect такой же, как в регионе, но только в другой форме представления. Возьмите из документации,

visibleMapRect

Область в настоящее время отображается в виде карты.

@property(nonatomic) MKMapRect visibleMapRect

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

+0

Учитывается ли это для пользовательских аннотаций, которые больше стандартного MKAnnotationView? Я имею в виду, что он может быть виден, но может быть несколько за кадром. –

+1

Wheres the Plus 100! Благодарю. – DogCoffee

Смежные вопросы