Ios MKMapView在mapView visible rect的子rect中拟合注释

Ios MKMapView在mapView visible rect的子rect中拟合注释,ios,annotations,mkmapview,frame,pins,Ios,Annotations,Mkmapview,Frame,Pins,我有一个带有MKMapView的视图,其大小与self.view.bound相同,但在“关闭”(地图的一部分已隐藏但已绘制)时完全可见 我希望将所有注释的管脚都放在可见的矩形上,但在边框处没有任何管脚。所以我想做的是,当地图关闭时,将所有注释适配到可见对象的一个子矩形(即mapView的一个子矩形) 当地图打开(完全可见)以将注释固定到整个矩形时。这也会产生缩放效果 我知道如何获得所有管脚的MKMapRect(或区域),但不知道如何将MKMapRect(/区域)匹配到映射矩形的所需子矩形。。。

我有一个带有
MKMapView
的视图,其大小与
self.view.bound
相同,但在“关闭”(地图的一部分已隐藏但已绘制)时完全可见

我希望将所有注释的管脚都放在可见的矩形上,但在边框处没有任何管脚。所以我想做的是,当地图关闭时,将所有注释适配到可见对象的一个子矩形(即
mapView
的一个子矩形)

当地图打开(完全可见)以将注释固定到整个矩形时。这也会产生缩放效果

我知道如何获得所有管脚的
MKMapRect
(或
区域
),但不知道如何将
MKMapRect
(/
区域
)匹配到映射矩形的所需子矩形。。。 你能帮我吗

这就是我所做的

- (void) fitMapForAnnotationsAnimated:(BOOL)animated{

if ([self.mapView.annotations count]<=1) return;

MKMapRect mapRect = MKMapRectNull;

for(id<MKAnnotation> annotation in [self.mapView annotations]){

    if (![annotation isKindOfClass:[MKUserLocation class]]) {
        MKMapPoint annotationPoint = MKMapPointForCoordinate([annotation coordinate]);
        MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0.1, 0.1);
        mapRect = MKMapRectUnion(mapRect, pointRect);
    }

}

MKMapRect newMapRect = mapRect;

if (mapFullScreen) {

    newMapRect =  [self.mapView mapRectThatFits:mapRect edgePadding:UIEdgeInsetsZero];


}else{

    MKMapView *smallMap = [[MKMapView alloc] initWithFrame:self.homeViewController.tableView.tableHeaderView.frame];

    newMapRect = [smallMap mapRectThatFits:mapRect edgePadding:UIEdgeInsetsMake(5, 5, 5, 5)];

    smallMap = nil;
}

MKCoordinateRegion region = MKCoordinateRegionForMapRect(newMapRect);
MKCoordinateRegion fitRegion = [self.mapView regionThatFits:region];

[self.mapView setRegion:fitRegion animated:animated];
-(void)fitMapForAnnotationsAnimated:(BOOL)动画{

如果([self.mapView.annotations count]如果您有一个MKMapRect,您是否尝试过使用setVisibleMapRect:edgePadding:animated:方法?是的,但一些管脚隐藏在下部。地图视图(以编程方式)附加在UITableView.headerView上,因此较高的部分被隐藏并带有origin.y负数。下面是我使用的[self.mapView setVisibleMapRect:mapRect EdgeAdding:UIEdgeInsetsMake(abs(CGRectGetMinY(self.mapView.frame)),5,5,5)动画:是];如果我为open mapView设置VisibleMaprect,然后为close mapView设置VisibleMaprect,则可见注释和区域与开始状态(close map)不同