Этот код устанавливает уровень масштабирования по умолчанию, сосредоточенный вокруг определенного места в viewDidLoad
.
Код работает отлично в предыдущих версиях iOS:
CLLocationDistance visibleDistance = 100000; // 100 kilometers
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, visibleDistance, visibleDistance);
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:region];
.
.
.
[mapView setRegion:adjustedRegion animated:NO];
Однако в iOS6 для местоположений с широтой выше ~ 75 ( > 75.1) приложение вылетает со следующим сообщением:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Invalid Region <center:nan, nan span:nan, nan>'
Я обнаружил, что для данного уровня масштабирования mapView
не может установить правильный MKCoordinateRegion
внутри. [mapView regionThatFits:region]
возвращает все значения как nan
. Если я использую переменную region
напрямую, она просто отображает карту по умолчанию (весь мир).
После некоторого тестирования я обнаружил, что, отрегулировав visibleDistance
, я могу заставить код работать правильно. Магическое расстояние, по-видимому, немного выше 20 километров (где-то между 22 и 23 км для ряда широт и широты значений Дельты).
Это происходит только на северных широтах (-80 работает просто отлично).
Карты работают в любом месте после первоначального позиционирования. Похоже, Apple изменила способ отображения видимых областей карты. Я использую более высокий уровень масштабирования для затронутого региона как обходной путь. Есть ли другой способ заставить его работать правильно?