美文网首页
MKMapView缩放显示全部annotation

MKMapView缩放显示全部annotation

作者: BabyNeedCare | 来源:发表于2018-11-12 10:47 被阅读0次

    在地图上加载许多annotation,是不是想一屏幕显示完所有的annotation?下面代码就可以实现。

    #define MINIMUM_ZOOM_ARC 0.014 //approximately 1 miles (1 degree of arc ~= 69 miles)  

    #define ANNOTATION_REGION_PAD_FACTOR 1.15  

    #define MAX_DEGREES_ARC 360  

    //size the mapView region to fit its annotations  

    - (void)zoomMapViewToFitAnnotations:(MKMapView *)mapView animated:(BOOL)animated  {   

        NSArray *annotations = mapView.annotations;  

    int count = [mapView.annotations count];  

    if ( count == 0) { return; } //bail if no annotations  

    //convert NSArray of id <MKAnnotation> into an MKCoordinateRegion that can be used to set the map size  

    //can't use NSArray with MKMapPoint because MKMapPoint is not an id  

    MKMapPoint points[count];//C array of MKMapPoint struct  

    for( int i=0; i<count; i++ ) //load points C array by converting coordinates to points  {  

            CLLocationCoordinate2D coordinate = [(id <MKAnnotation>)[annotations objectAtIndex:i] coordinate];  

            points[i] = MKMapPointForCoordinate(coordinate);  

        }  

    //create MKMapRect from array of MKMapPoint  

        MKMapRect mapRect = [[MKPolygon polygonWithPoints:points count:count] boundingMapRect];  

    //convert MKCoordinateRegion from MKMapRect  

        MKCoordinateRegion region = MKCoordinateRegionForMapRect(mapRect);  

    //add padding so pins aren't scrunched on the edges  

        region.span.latitudeDelta  *= ANNOTATION_REGION_PAD_FACTOR;  

        region.span.longitudeDelta *= ANNOTATION_REGION_PAD_FACTOR;  

    //but padding can't be bigger than the world  

    if( region.span.latitudeDelta > MAX_DEGREES_ARC ) { region.span.latitudeDelta  = MAX_DEGREES_ARC; }  

    if( region.span.longitudeDelta > MAX_DEGREES_ARC ){ region.span.longitudeDelta = MAX_DEGREES_ARC; }  

    //and don't zoom in stupid-close on small samples  

    if( region.span.latitudeDelta  < MINIMUM_ZOOM_ARC ) { region.span.latitudeDelta  = MINIMUM_ZOOM_ARC; }  

    if( region.span.longitudeDelta < MINIMUM_ZOOM_ARC ) { region.span.longitudeDelta = MINIMUM_ZOOM_ARC; }  

    //and if there is a sample of 1 we want the max zoom-in instead of max zoom-out  

    if( count == 1 )  {   

            region.span.latitudeDelta = MINIMUM_ZOOM_ARC;  

            region.span.longitudeDelta = MINIMUM_ZOOM_ARC;  

        }  

        [mapView setRegion:region animated:animated];  

    }  

    - (void)viewWillAppear:(BOOL)animated  {  

        [self zoomMapViewToFitAnnotations:self.mapView animated:animated];  

    //or maybe you would do the call above in the code path that sets the annotations array  

    }  

    参考:https://blog.csdn.net/dean19900504/article/details/9750617

    相关文章

      网友评论

          本文标题:MKMapView缩放显示全部annotation

          本文链接:https://www.haomeiwen.com/subject/oiuqfqtx.html