Ten kod ustawia domyślny poziom powiększenia skupiony wokół określonej lokalizacji w viewDidLoad
. Kod działa poprawnie w poprzednich wersjach systemu iOS:MapView w iOS6 nie pokazuje pewnych poziomów powiększenia na szerokości geograficznej> 75 północy
CLLocationDistance visibleDistance = 100000; // 100 kilometers
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, visibleDistance, visibleDistance);
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:region];
.
.
.
[mapView setRegion:adjustedRegion animated:NO];
Jednak w iOS6 lokalizacje z szerokości powyżej ~ 75 (> 75,1) awarii aplikacji z następującym komunikatem:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Invalid Region <center:nan, nan span:nan, nan>'
znalazłem dla danego poziomu powiększenia mapView
nie można wewnętrznie ustawić odpowiedniego MKCoordinateRegion
. [mapView regionThatFits:region]
zwraca wszystkie wartości jako nan
. Jeśli użyję bezpośrednio zmiennej region
, po prostu wyświetli się domyślna mapa (cały świat).
Po kilku testach okazało się, że poprzez dostosowanie visibleDistance
mogę uzyskać kod do prawidłowego działania. Magiczna odległość wydaje się nieznacznie przekraczać 20 kilometrów (gdzieś pomiędzy 22 a 23 km dla szeregu szerokości i szerokości geograficznej). Dzieje się tak tylko na północnych szerokościach geograficznych (-80 działa dobrze).
Mapy działają w dowolnym miejscu po początkowym ustawieniu. Wygląda na to, że Apple zmienił sposób inicjalizacji widocznych regionów mapy. Używam wyższego poziomu powiększenia dla dotkniętego regionu jako obejścia. Czy jest jakiś inny sposób, aby działał poprawnie?
Staraj się nie używać funkcji regionThatFits do generowania MKCoordinateRegion. W systemie iOS 6 zauważam, że nie działa zgodnie z oczekiwaniami (myślę, że to błąd). Zamiast tego utwórz MKCoordinateSpan, aby utworzyć MKCoordinateRegion. Następnie skonfiguruj region widoku mapy do tego. Wreszcie użyj setCenterCoordinate, aby ustawić położenie środkowe widoku mapy. –
Ale muszę znać "MKCoordinateRegion", który pojawi się na ekranie, aby skonfigurować dodatkowe parametry kontrolujące częściowe ładowanie lokalizacji. Ponadto, jeśli użyję 'MKCoordinateSpan', pokażę zmienne domyślne poziomy powiększenia w zależności od szerokości geograficznej (chyba, że skompensuję ją ręcznie). 'MKCoordinateRegionMakeWithDistance()' działa tak jak powinien, ale problem leży w metodzie, która inicjuje 'mapView' z regionem, ponieważ problem jest widoczny, gdy używam' setRegion: 'bezpośrednio (bez' regionThatFits: ') (mapa pokazuje cały świat). – Neur0mans3r
Miałem ten problem. Kiedy przeglądałem mapę map, jej ramka wynosiła 0,0,0,0. Nie jestem pewien, czy to był problem. Usunąłem wywołanie 'regionThatFits' w moim kodzie i zamiast tego wysłałem region zbudowany za pomocą' MKCoordinateRegionMake (location, span) 'i wydaje mi się, że działa on teraz dla mnie. –