我必须将引脚安装到可见地图上,以便使用众所周知的代码行获得 MKMapRect:
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, delta, delta);
mapRect = MKMapRectUnion(mapRect, pointRect);
}
}
然后我得到并设置MKCoordinateRegion
:
MKCoordinateRegion region = MKCoordinateRegionForMapRect(newMapRect);
MKCoordinateRegion fitRegion = [self.mapView regionThatFits:region];
[self.mapView setRegion:fitRegion animated:animated];
由于我使用有两种状态(打开和关闭地图)关闭是地图不完全可见的地方(origin.y 值为self.view
负)我需要在调用方法“fitToAnnotations”时重绘矩形我使用[self.mapView setNeedsLayout];
所以我可以得到正确的self.mapView.frame
(打开或关闭)。
现在,如果我使用此代码和其他一些行,在 iOS7 中一切正常,但在 iOS 7.1 中,open-map-Region 不同,显示一个没有针脚的大边缘区域,并且全部安装在中心部分。
这是我如何获得正确的区域来显示地图是全屏还是半屏
MKMapRect newMapRect = mapRect;
if (mapFullScreen) {
newMapRect = [self.mapView mapRectThatFits:mapRect edgePadding:UIEdgeInsetsMake(200, 15, 30, 15)];
}else{
MKMapView *smallMap = [[MKMapView alloc] initWithFrame:self.homeViewController.tableView.tableHeaderView.frame];
newMapRect = [smallMap mapRectThatFits:mapRect edgePadding:UIEdgeInsetsMake(15, 60, 5, 60)];
smallMap = nil;
}
怎么了?