【发布时间】: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