在旋转期间MKMapView的centerCoordinate的错误?

时间:2014-02-06 22:34:25

标签: ios ipad mkmapview mapkit screen-rotation

我想我可能在MKMapView中发现了一个错误,但是我想让人们运行它,看看是否有其他人遇到过这个问题。我正在使用iOS 7和Xcode 5。

在我的故事板中,我有一个视图控制器,其中包含MKMapView。我的应用程序允许旋转纵向和横向。我使用autolayout来保持用户旋转设备时MKMapView的帧更新。

轮换后,似乎MKMapViewcenterCoordinate委托方法中报告了错误的regionDidChangeAnimated

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    NSLog(@"%@ %@", @(mapView.centerCoordinate.latitude), @(mapView.centerCoordinate.longitude));
}

当我的视图控制器首先以纵向方向加载时,我得到以下输出:

25.69266565483518 -40               
37.17818069458006 -96.05458068847656

将设备旋转到横向后,我得到以下输出:

9.656197790830817 -96.05458068847656

将设备旋转回纵向后,我得到以下输出:

37.17818069458006 -96.05458068847656

最后,这里是纵向和横向两种截图。我在图像的中心画了点,表明 - 至少从渲染的角度来看 - 中心是相同的。

Portrait Orientation Landscape Orientation

这实际上是一个出现的错误,还是我错过了什么?

编辑:

我更改了regionDidChangeAnimated中的代码,以便在延迟一毫秒后输出centerCoordinate。当我这样做时,我得到了正确的结果。但是,这不是最佳选择,我仍然认为在调用 centerCoordinate之前,应MKMapView 更新regionDidChangeAnimated

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_MSEC), dispatch_get_main_queue(), ^
    {
        NSLog(@"%@ %@", @(mapView.centerCoordinate.latitude), @(mapView.centerCoordinate.longitude));
    });
}

37.17818069458006 -96.05458068847656
37.17818069458006 -96.05458068847656
37.17818069458006 -96.05458068847656
37.17818069458006 -96.05458068847656

编辑:

我创建了一个示例项目,以便重现Apple bug报告的错误。我注意到如果MKMapView未嵌入导航控制器中,则centerCoordinate属性始终报告正确的值。只要我将其嵌入导航控制器中 - 并关闭“在顶部条形和底部条形下方延伸边缘”选项 - 它就会报告错误的值。

1 个答案:

答案 0 :(得分:2)

我向Apple提交的缺陷被确认为重复。看起来这确实是MapKit中的一个错误。