如何在MKCoordinateRegion内检查MKAnnotation是否可用

8

我注意到如果使用MKMapView的 selectAnnotation:animated:,如果MKAnnotation没有显示在当前地图所显示的MKCoordinateRegion中,它会将我的地图滚动到屏幕外。

有没有简单的方法可以检查注释是否当前在指定的MKCoordinateRegion上可见? 我想能够选择仅在屏幕上而不是屏幕外的注释。

1个回答

27
使用MKMapView类中的annotationsInMapRect:方法。它返回一个NSSet,其中包含在给定地图矩形内可见的所有注释对象。使用NSSetcontainsObject:方法来测试该注释是否存在于可见注释集合中。
MKMapRect visibleMapRect = aMapView.visibleMapRect;
NSSet *visibleAnnotations = [aMapView annotationsInMapRect:visibleMapRect];
BOOL annotationIsVisible = [visibleAnnotations containsObject:someAnnotation];

另外,visibleMapRect与区域相同,只是表示形式不同。从文档中了解到:

visibleMapRect

地图视图当前显示的区域。

@property(nonatomic) MKMapRect visibleMapRect

此属性表示与区域属性相同的基本信息,但指定为地图矩形而不是区域。


这是否考虑了比标准MKAnnotationView更大的自定义注释视图?我的意思是它可能可见,但可能有些偏离屏幕。 - Roderic Campbell
1
加100的按钮在哪里!谢谢。 - DogCoffee
这是否考虑了地图旋转?请查看此文章中的图片,以了解当地图旋转时区域与屏幕之间的关系。 - Josh Bernfeld

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接