2014-02-06 5 views
2

Я думаю, что, возможно, я нашел ошибку в MKMapView, но я хотел бы запустить ее для людей, чтобы узнать, столкнулся ли кто-нибудь еще с этой проблемой. Я использую iOS 7 и Xcode 5.Ошибка с центром MKMapViewCoordinate во время вращения?

В моей раскадровке у меня есть контроллер вида с 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 

Наконец, вот скриншоты портретной и альбомной ориентации. Я нарисовал точки над центром изображений, чтобы показать, что - по крайней мере, с точки зрения рендеринга - центры одинаковы.

Portrait Orientation Landscape Orientation

Является ли это на самом деле ошибка, как это кажется, или я что-то отсутствует?

РЕДАКТИРОВАТЬ:

Я изменил код в 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 

EDIT:

Я создал образец проекта для того, чтобы воспроизвести ошибку, для сообщения об ошибке Apple. Что я заметил, что если MKMapView не встроен в контроллер навигации, свойство centerCoordinate всегда сообщает правильное значение. Как только я встроил его в контроллер навигации, и отключил опции «протягивать края под верхними барами и нижними столбцами» - он сообщил о неправильных значениях.

ответ

2

Дефект, который я представил Apple, был подтвержден как дубликат. Похоже, что это действительно ошибка в MapKit.

+1

Теперь, когда это 2016, я все еще вижу эту ошибку, есть ли у вас ссылка на отчет об ошибке и статус? – Bruce

+0

Я вижу несоответствие с координатой центра MKMapView. Я думаю, что это связано с тем, как он вычисляет раму представлений. –