2013-02-19 46 views
0

多個批註我有很多mkmapview.To註釋顯示上的MKMapView多個批註我使用的代碼上的MKMapView

MKMapRect zoomRect = MKMapRectNull; 
for (id <MKAnnotation> annotation in self.mapView.annotations) 
{ 
     if([[annotation description]isEqualToString:@"Location"]) 
     { 
      MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation.coordinate); 
      MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0, 0); 
      if (MKMapRectIsNull(zoomRect)) 
      { 
         zoomRect = pointRect; 
      } 
      else 
      { 
         zoomRect = MKMapRectUnion(zoomRect, pointRect); 
      } 
     } 
    } 

MKCoordinateRegion region = MKCoordinateRegionForMapRect(zoomRect); 

[self.mapView setRegion:region animated:YES]; 

即使註釋在地圖上繪製,某些註釋被截斷。

enter image description here

+0

你想加載多少個註釋? – kishore 2013-02-19 05:33:01

+0

@ kishore:根據API迴應,我需要繪製 – 2013-02-19 06:48:15

回答

0

我許多,如果不是大多數情況下,你會在這樣的頂部有一個腳,因爲你計算矩形僅用於註釋指向的座標,而不用於在該位置顯示的圖像。

您可能會發現使用MKMapView Class時註解視圖的屏幕有多遠,但您需要先縮放到不正確的矩形,才能知道屏幕測量覆蓋的地圖距離。

另一種方法是將zoomRect向北擴大一小部分,這個比例是基於引腳大小與地圖視圖大小的比值。例如(使用拼湊的數字),如果地圖視圖的高度爲100pt並且針爲10,則需要使zoomrect高10%(假設頂部有一個針 - 您可以通過檢查zoomRect比mapview更寬,或者只是添加10%,因爲沒有人會關心頂部是否有一些未使用的地圖)。

0

你可以試試這個,它可以幫助你

- (void)zoomToFitMapAnnotations { 

    if ([mapView.annotations count] == 0) return; 

     int i = 0; 
     MKMapPoint points[[mapView.annotations count]]; 

     //build array of annotation points 
     for (id<MKAnnotation> annotation in [mapView annotations]) 
      points[i++] = MKMapPointForCoordinate(annotation.coordinate); 

     MKPolygon *poly = [MKPolygon polygonWithPoints:points count:i]; 

     [mapView setRegion:MKCoordinateRegionForMapRect([poly boundingMapRect]) animated:YES]; 


}