【问题标题】:Bug with MKMapView's centerCoordinate during rotation?旋转期间 MKMapView 的 centerCoordinate 错误?
【发布时间】:2014-02-06 22:34:25
【问题描述】:

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

在我的故事板中,我有一个带有MKMapView 的视图控制器。我的应用程序允许纵向和横向旋转。当用户旋转设备时,我正在使用自动布局来更新MKMapView 的框架。

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

- (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

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

这实际上是一个错误,还是我遗漏了什么?

编辑:

我更改了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 错误报告中的错误。我注意到,如果 MKMapView 未嵌入导航控制器中,则 centerCoordinate 属性始终报告正确的值。一旦我将它嵌入到导航控制器中——并关闭了“在顶栏和底栏下扩展边缘”选项——它就会报告不正确的值。

【问题讨论】:

    标签: ios ipad mkmapview mapkit screen-rotation


    【解决方案1】:

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

    【讨论】:

    • 现在已经是 2016 年了,我仍然看到这个错误,你有错误报告和状态的链接吗?
    • 我也看到了与 MKMapView 中心坐标的差异。我认为这与它如何计算视图框架有关。
    猜你喜欢
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多