2011-03-01 55 views
0

這裏是情況:我正在使用MapKit在地圖上顯示多個位置。我有代碼來計算允許地圖上的所有點適合窗口的邊界。我最近添加了代碼以允許出現最近位置的標註泡泡(合適的術語?)。不幸的是,標註泡泡不適合窗口的邊界。理想情況下,我希望縮放調整以適應所有註釋以及最近位置的標註泡泡。有關如何做到這一點的任何建議?這裏是我的縮放方法:在iOS中獲取註釋標註位置

-(void)zoomToFitMapAnnotations:(MKMapView*)mv 
{ 
    if([mv.annotations count] == 0) 
      return; 

    CLLocationCoordinate2D topLeftCoord; 
    topLeftCoord.latitude = -90; 
    topLeftCoord.longitude = 180; 

    CLLocationCoordinate2D bottomRightCoord; 
    bottomRightCoord.latitude = 90; 
    bottomRightCoord.longitude = -180; 

    for(WaybackAnnotation *annotation in [mv annotations]) 
    { 
     if ([annotation isKindOfClass:[WaybackAnnotation class]]) 
     { 
      topLeftCoord.longitude = fmin(topLeftCoord.longitude, annotation.coordinate.longitude); 
      topLeftCoord.latitude = fmax(topLeftCoord.latitude, annotation.coordinate.latitude); 

      bottomRightCoord.longitude = fmax(bottomRightCoord.longitude, annotation.coordinate.longitude); 
      bottomRightCoord.latitude = fmin(bottomRightCoord.latitude, annotation.coordinate.latitude); 
     } 
    } 

    MKCoordinateRegion region; 
    region.center.latitude = topLeftCoord.latitude - (topLeftCoord.latitude - bottomRightCoord.latitude) * 0.5; 
    region.center.longitude = topLeftCoord.longitude + (bottomRightCoord.longitude - topLeftCoord.longitude) * 0.5; 
    region.span.latitudeDelta = fabs(topLeftCoord.latitude - bottomRightCoord.latitude) * 1.1; // Add a little extra space on the sides 
    region.span.longitudeDelta = fabs(bottomRightCoord.longitude - topLeftCoord.longitude) * 1.1; // Add a little extra space on the sides 

    region = [mv regionThatFits:region]; 
    [mv setRegion:region animated:YES]; 
} 

在此先感謝! 詹姆斯

回答

3

由於泡在銷上方一直顯示,你需要在頂部一些額外的填充。你知道屏幕像素填充的高度。使用MKMapView的轉換方法(-convertRect:toRegionFromView:和朋友)將它們轉換爲地理座標。