0

我在 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];

即使注释被绘制在地图上,某些注释也会被截断。

在此处输入图像描述

4

2 回答 2

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]; 


}
于 2013-02-19T05:31:46.837 回答
0

在很多情况下,如果不是大多数情况下,您会在顶部有一个这样的图钉,因为您正在计算的矩形仅适用于注释所指向的坐标,而不适用于该位置显示的图像。

您可能能够使用MKMapView 类找出注释视图离屏幕多远,但您需要先缩放到不正确的矩形才能知道屏幕测量所覆盖的地图距离。

另一种方法是根据图钉的大小与地图视图大小相比,将 zoomRect 稍微向北扩展一小部分。例如(使用编造的数字)如果地图视图的高度为 100pt,而 pin 为 10,则您需要将 zoomRect 高 10%(假设顶部有一个 pin - 您可以通过检查zoomRect 比地图视图更宽,或者只是添加 10%,因为没有人会关心顶部是否有一些未使用的地图)。

于 2013-02-19T20:03:24.957 回答