2011-12-30 15 views
7

我注意到如果我使用MKMapView的selectAnnotation:animated:,如果MKAnnotation沒有顯示在我的地圖顯示的當前MKCoordinateRegion中,它會將我的地圖從屏幕滾動出來。如何檢查MKCoordinateRegion中是否有MKAnnotation

是否有一個微不足道的方法來檢查指定的MKCoordinateRegion當前是否在屏幕上?我希望能夠選擇僅在屏幕上而不是屏幕外的註釋。

回答

24

使用MKMapView類中的annotationsInMapRect:方法。它返回在給定地圖矩形中可見的所有註記對象的。使用方法NSSet來測試註釋是否存在於該組可見註釋中。

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

此外visibleMapRect與區域相同,但只是一種不同的表示形式。從文檔以,

visibleMapRect

該地區目前地圖視圖中顯示。

@property(nonatomic) MKMapRect visibleMapRect

此屬性表示相同的基本信息作爲區域屬性,但指定爲地圖矩形,而不是一個區域。

+0

這是否支持大於標準MKAnnotationView的自定義批註?我的意思是,它可能是可見的,但它可能有點偏離屏幕。 – 2012-07-18 03:26:36

+1

Wheres the Plus 100 button!謝謝。 – DogCoffee 2015-05-20 03:30:02