MKMapRegion issues iOS 7.1



我必须适合引脚可见的地图,所以我得到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];

由于我使用了两种状态(打开和关闭地图)关闭是地图不完全可见的地方(原点)。y值在self.view是负的)我需要重新绘制矩形时,方法"fitToAnnotations"被调用,我使用[self.mapView setNeedsLayout];,所以我可以得到正确的self.mapView.frame(打开或关闭)。

现在,如果我使用这段代码和其他一些行,在iOS7中一切都工作得很好,但在ios7.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;
}

怎么了?

我在iOS 7.1中遇到了同样的问题。

在我的应用程序中,问题是随机发生的,它可能取决于一些内部map线程的执行速度。

对我来说,一个肮脏的hack是在调用方法之前在后台线程中添加一个[NSThread sleepForTimeInterval:1.0]来放大区域(这类似于你所描述的代码)

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{  
    //(generating annotions array here)   
    //ios 7.1 hack:
    [NSThread sleepForTimeInterval:1.0];
    dispatch_async(dispatch_get_main_queue(), ^{
        [self zoomMapViewToFitAnnotations:self.mapView annotations:[annotationsToAddArray allObjects] animated:YES];
        //(addding the generated annotations here)     
    });
});

相关内容

  • 没有找到相关文章

最新更新