有没有办法让mkmapview放大显示所有注释?

时间:2011-04-02 21:31:08

标签: iphone objective-c xcode annotations mkmapview

有没有办法让mkmapview放大以显示所有注释?我在北美有94个注释,我不希望用户必须缩小很多。以下是我的代码片段:

- (void)viewDidLoad {
    [super viewDidLoad];

    [mapView setMapType:MKMapTypeStandard];
    [mapView setZoomEnabled:YES];
    [mapView setScrollEnabled:YES];




    // Central Alabama Chapter

    MKCoordinateRegion region = { {0.0, 0.0 }, { 0.0, 0.0 } }; 
    region.center.latitude = 33.45606;
    region.center.longitude = -86.83078;
    region.span.longitudeDelta = 0.01f;
    region.span.latitudeDelta = 0.01f;

    [mapView setRegion:region animated:YES]; 

    [mapView setDelegate:self];

    DisplayMap *ann = [[DisplayMap alloc] init]; 
    ann.title = @"Central Alabama Chapter";
    ann.subtitle = @"721 Hillmoor Lane Homewood, Alabama 35209"; 
    ann.coordinate = region.center; 
    [mapView addAnnotation:ann];


    // Walnut Ridge Fire Department

    MKCoordinateRegion region1 = { {0.0, 0.0 }, { 0.0, 0.0 } }; 
    region1.center.latitude = 36.11493;
    region1.center.longitude = -90.95695;
    region1.span.longitudeDelta = 0.01f;
    region1.span.latitudeDelta = 0.01f;



    DisplayMap *ann1 = [[DisplayMap alloc] init]; 
    ann1.title = @"Walnut Ridge Fire Department";
    ann1.subtitle = @"3217 Highway 67 # B, Walnut Ridge, AR"; 
    ann1.coordinate = region1.center; 
    [mapView addAnnotation:ann1];

1 个答案:

答案 0 :(得分:3)

double minLat=360.0f,minLon=360.0f;
double maxLat=-360.0f,maxLon=-360.0f;

for (<MKAnnotation> vu in [theMapView annotations]) {
    if ( vu.coordinate.latitude  < minLat ) minLat = vu.coordinate.latitude;
    if ( vu.coordinate.latitude  > maxLat ) maxLat = vu.coordinate.latitude;
    if ( vu.coordinate.longitude < minLon ) minLon = vu.coordinate.longitude;
    if ( vu.coordinate.longitude > maxLon ) maxLon = vu.coordinate.longitude;
}
CLLocation *newCenter = [[CLLocation alloc] initWithLatitude: (maxLat+minLat)/2.0
                                                   longitude: (maxLon+minLon)/2.0];
theMapView.region = MKCoordinateRegionMake (newCenter.coordinate,  
                        MKCoordinateSpanMake( fabs(maxLat-minLat), fabs(maxLon-minLon) ) );