2014-02-06 90 views
2

我想我可能在MKMapView中發現了一個錯誤,但我想由其他人運行,看看是否有其他人遇到了這個問題。我正在使用iOS 7和Xcode 5.旋轉過程中MKMapView的中心座標錯誤?

在我的故事板中,我有一個視圖控制器,其中有MKMapView。我的應用允許旋轉肖像和風景。我正在使用自動佈局來保持在用戶旋轉設備時更新MKMapView的幀。

旋轉之後,似乎MKMapViewregionDidChangeAnimated委託方法報告不正確的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 

最後,這裏都是縱向和橫向的屏幕截圖。我在圖像的中心畫了點,以表明 - 至少從渲染的角度來看 - 中心是一樣的。

Portrait Orientation Landscape Orientation

這實際上是一個錯誤,因爲它似乎還是我失去了一些東西?

編輯:

我在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屬性始終報告正確的值。只要我將它嵌入到導航控制器中,並關閉了「在頂部條和底部條之下擴展邊緣」選項 - 它會報告錯誤的值。

回答

2

我向Apple提交的缺陷被證實是重複的。看起來這確實是MapKit中的一個錯誤。

+1

現在是2016年,我仍然看到這個錯誤,你有鏈接到錯誤報告和狀態? – Bruce

+0

我也看到與MKMapView中心座標的差異。我認爲這與它如何計算視圖框架有關。 –