我想我可能在MKMapView
中發現了一個錯誤,但我想由其他人運行,看看是否有其他人遇到了這個問題。我正在使用iOS 7和Xcode 5.旋轉過程中MKMapView的中心座標錯誤?
在我的故事板中,我有一個視圖控制器,其中有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
是一毫秒的延遲之後被輸出。當我這樣做時,我會得到正確的結果。然而,這並不是最優的,我仍然認爲應該被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
編輯:
我爲了重現bug的蘋果的bug報告中創建一個示例項目。我注意到,如果MKMapView未嵌入導航控制器中,centerCoordinate屬性始終報告正確的值。只要我將它嵌入到導航控制器中,並關閉了「在頂部條和底部條之下擴展邊緣」選項 - 它會報告錯誤的值。
現在是2016年,我仍然看到這個錯誤,你有鏈接到錯誤報告和狀態? – Bruce
我也看到與MKMapView中心座標的差異。我認爲這與它如何計算視圖框架有關。 –