Я думаю, что, возможно, я нашел ошибку в 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
Наконец, вот скриншоты портретной и альбомной ориентации. Я нарисовал точки над центром изображений, чтобы показать, что - по крайней мере, с точки зрения рендеринга - центры одинаковы.
Является ли это на самом деле ошибка, как это кажется, или я что-то отсутствует?
РЕДАКТИРОВАТЬ:
Я изменил код в 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 всегда сообщает правильное значение. Как только я встроил его в контроллер навигации, и отключил опции «протягивать края под верхними барами и нижними столбцами» - он сообщил о неправильных значениях.
Теперь, когда это 2016, я все еще вижу эту ошибку, есть ли у вас ссылка на отчет об ошибке и статус? – Bruce
Я вижу несоответствие с координатой центра MKMapView. Я думаю, что это связано с тем, как он вычисляет раму представлений. –