我想我可能在MKMapView
中发现了一个错误,但是我想让人们运行它,看看是否有其他人遇到过这个问题。我正在使用iOS 7和Xcode 5。
在我的故事板中,我有一个视图控制器,其中包含MKMapView
。我的应用程序允许旋转纵向和横向。我使用autolayout来保持用户旋转设备时MKMapView
的帧更新。
轮换后,似乎MKMapView
在centerCoordinate
委托方法中报告了错误的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
最后,这里是纵向和横向两种截图。我在图像的中心画了点,表明 - 至少从渲染的角度来看 - 中心是相同的。
这实际上是一个出现的错误,还是我错过了什么?
编辑:
我更改了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属性始终报告正确的值。只要我将其嵌入导航控制器中 - 并关闭“在顶部条形和底部条形下方延伸边缘”选项 - 它就会报告错误的值。
答案 0 :(得分:2)
我向Apple提交的缺陷被确认为重复。看起来这确实是MapKit中的一个错误。