我注意到如果我使用MKMapView的selectAnnotation:animated:
,如果我的地图正在显示的当前MKCoordinateRegion中没有显示MKAnnotation,它会将我的地图滚动到屏幕外。
是否有一种简单的方法来检查注释当前是否在指定的MKCoordinateRegion中的屏幕上?我希望能够选择仅在屏幕上而不是屏幕外的注释。
答案 0 :(得分:27)
使用MKMapView
课程中的annotationsInMapRect:
方法。它返回在给定map rect中可见的所有注释对象的NSSet
。使用containsObject:
NSSet
方法测试注释是否存在于该组可见注释中。
MKMapRect visibleMapRect = aMapView.visibleMapRect;
NSSet *visibleAnnotations = [aMapView annotationsInMapRect:visibleMapRect];
BOOL annotationIsVisible = [visibleAnnotations containsObject:someAnnotation];
同样visibleMapRect
与区域相同,但只是一种不同的表示形式。从文档中获取,
visibleMapRect
地图视图当前显示的区域。
@property(nonatomic) MKMapRect visibleMapRect
此属性表示与region属性相同的基本信息,但指定为地图矩形而不是区域。