如何在缩放时计算MapView上显示的数字和注释?

时间:2013-08-13 07:26:11

标签: ios mkmapview mkannotation

当我缩放mapView时,我需要计算注释的数量,并获得在地图上显示的数组, 然后,我需要重新加载我的表格并显示仅在地图上显示的列表。

如何获得带注释的数字和数组?

3 个答案:

答案 0 :(得分:9)

至于swift 2.0,我通常使用这个mapView扩展来将所有当前可见的注释作为MKAnnotations数组获取:

extension MKMapView {
    func visibleAnnotations() -> [MKAnnotation] {
        return self.annotationsInMapRect(self.visibleMapRect).map { obj -> MKAnnotation in return obj as! MKAnnotation }
    }
}

答案 1 :(得分:8)

MapKit类中的这两个方法怎么样:

1)使用以下方法获取地图的可见矩形:

@property(nonatomic, readonly) CGRect annotationVisibleRect

http://developer.apple.com/library/ios/DOCUMENTATION/MapKit/Reference/MKMapView_Class/MKMapView/MKMapView.html#//apple_ref/occ/instp/MKMapView/annotationVisibleRect

2)然后从参数map矩形中获取注释NSSet:

- (NSSet *)annotationsInMapRect:(MKMapRect)mapRect

http://developer.apple.com/library/ios/DOCUMENTATION/MapKit/Reference/MKMapView_Class/MKMapView/MKMapView.html#//apple_ref/occ/instm/MKMapView/annotationsInMapRect

所以我希望这样的事情:

-(void)getAnotationsInVisibleMapRectangle
{
    NSSet *annotationSet = [myMapView annotationsInMapRect:myMapView.annotationVisibleRect];

    // print number of annotations
    NSLog(@"Number of annotations in rect: %d", annotationSet.count);

    // this will return an array from the NSSet
    NSArray *annotationArray = [annotationSet allObjects]; 
}

这有帮助吗?

答案 2 :(得分:1)

David在Swift 4中的出色解决方案

extension MKMapView {
    func visibleAnnotations() -> [MKAnnotation] {
        return self.annotations(in: self.visibleMapRect).map { obj -> MKAnnotation in return obj as! MKAnnotation }
    }
}