iOS收藏

iOS开发-地图根据展示大头针动态缩放可视范围

2018-10-25  本文已影响30人  番茄炒西红柿啊
#pragma mark - 根据所有的大头针坐标,计算显示范围,屏幕能够刚好显示大头针
#define CW_MINIMUM_ZOOM_ARC 0.014
#define CW_ANNOTATION_REGION_PAD_FACTOR 1.15
#define CW_MAX_DEGREES_ARC 360
- (void)zoomMapViewToFitAnnotations:(MAMapView *)mapView animated:(BOOL)animated
{
    NSArray *annotations = mapView.annotations;
    NSInteger count = [mapView.annotations count];
    if ( count == 0) { return; }
    MAMapPoint points[count];
    for( int i=0; i<count; i++ )
    {
        CLLocationCoordinate2D coordinate = [(id <MAAnnotation>)[annotations objectAtIndex:i] coordinate];
        points[i] = MAMapPointForCoordinate(coordinate);
    }
    MAMapRect mapRect = [[MAPolygon polygonWithPoints:points count:count] boundingMapRect];
    // 因为,中间的一个大头针居中显示,所以这里的size要减一半.所以乘以二
//    mapRect.size.width = mapRect.size.width * 2;
//    mapRect.size.height = mapRect.size.height * 2;
    
    mapRect.size.width = mapRect.size.width;
    mapRect.size.height = mapRect.size.height;
    
    MACoordinateRegion region = MACoordinateRegionForMapRect(mapRect);
    
    region.span.latitudeDelta  *= CW_ANNOTATION_REGION_PAD_FACTOR;
    region.span.longitudeDelta *= CW_ANNOTATION_REGION_PAD_FACTOR;
    
    if( region.span.latitudeDelta > CW_MAX_DEGREES_ARC ) { region.span.latitudeDelta  = CW_MAX_DEGREES_ARC; }
    if( region.span.longitudeDelta > CW_MAX_DEGREES_ARC ){ region.span.longitudeDelta = CW_MAX_DEGREES_ARC; }
    
    if( region.span.latitudeDelta  < CW_MINIMUM_ZOOM_ARC ) { region.span.latitudeDelta  = CW_MINIMUM_ZOOM_ARC; }
    if( region.span.longitudeDelta < CW_MINIMUM_ZOOM_ARC ) { region.span.longitudeDelta = CW_MINIMUM_ZOOM_ARC; }
    if( count == 1 )
    {
        region.span.latitudeDelta = CW_MINIMUM_ZOOM_ARC;
        region.span.longitudeDelta = CW_MINIMUM_ZOOM_ARC;
    }
//    region.center = self.location1;
    [mapView setRegion:region animated:animated];
}

非原创: 原文链接弄丢了.

上一篇下一篇

猜你喜欢

热点阅读