zoukankan      html  css  js  c++  java
  • MKMapView缩放显示全部annotation(转)

    原文  http://blog.csdn.net/favormm/article/details/8028026
    #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 }
  • 相关阅读:
    全排列算法(java实现) 组合算法实现
    int -2147483648 ----- 2147483647
    Gradel 多渠道打包 代码混淆
    Android开发环境搭建
    自定义相册、九宫格显示图片
    新技术:retrofit
    新技术:dagger
    主流架构:MVVP
    GreenDao3.2的使用
    第三方框架:EventBus
  • 原文地址:https://www.cnblogs.com/xiaobaizhu/p/3469335.html
Copyright © 2011-2022 走看看