Questo codice imposta un livello di zoom predefinito centrato attorno a una posizione specificata in viewDidLoad
. Il codice funziona bene nelle versioni precedenti di iOS:MapView in iOS6 non mostrerà determinati livelli di zoom alla latitudine> 75 nord
CLLocationDistance visibleDistance = 100000; // 100 kilometers
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, visibleDistance, visibleDistance);
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:region];
.
.
.
[mapView setRegion:adjustedRegion animated:NO];
Tuttavia, in iOS6 per le posizioni con la latitudine sopra ~ 75 (> 75,1) l'applicazione si blocca con il seguente messaggio:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Invalid Region <center:nan, nan span:nan, nan>'
ho trovato che per il livello di zoom specificato mapView
non è possibile impostare un valore corretto per MKCoordinateRegion
internamente. [mapView regionThatFits:region]
restituisce tutti i valori come nan
. Se utilizzo direttamente la variabile region
, mostra solo la mappa predefinita (il mondo intero).
Dopo alcuni test ho trovato che regolando il visibleDistance
posso far funzionare correttamente il codice. La distanza magica sembra essere leggermente superiore ai 20 chilometri (da qualche parte tra 22 e 23 km per una serie di valori di latitudine e latitudineDelta). Questo succede solo alle latitudini settentrionali (-80 funziona bene).
Le mappe funzionano in qualsiasi posizione dopo il posizionamento iniziale. Sembra che Apple abbia cambiato il modo in cui le regioni della mappa visibile vengono inizializzate. Sto usando un livello di zoom più alto per la regione interessata come soluzione alternativa. C'è un altro modo per farlo funzionare correttamente?
Provare a non utilizzare regionThatFits per generare una MKCoordinateRegion. In iOS 6, noto che non funziona come previsto (penso che questo sia un bug). Invece, crea MKCoordinateSpan per creare una MKCoordinateRegion. Quindi imposta la regione della vista della mappa su quella. Infine usa setCenterCoordinate per impostare la posizione centrale della vista della mappa. –
Ma ho bisogno di conoscere il 'MKCoordinateRegion' che verrà mostrato sullo schermo per impostare parametri aggiuntivi che controllano il caricamento parziale delle posizioni. Inoltre, se uso un 'MKCoordinateSpan' mostrerei livelli di zoom variabili predefiniti a seconda della latitudine (a meno che non compensi manualmente). 'MKCoordinateRegionMakeWithDistance()' funziona come dovrebbe, ma il problema è nel metodo che inizializza 'mapView' con la regione, perché il problema è evidente quando uso' setRegion: 'direttamente (senza' regionThatFits: ') (la mappa mostra il mondo intero). – Neur0mans3r
Stavo avendo questo problema. Quando ho inserito il mio mapView, il suo frame era 0,0,0,0. Non sono sicuro se questo era il problema. Ho rimosso la chiamata 'regionThatFits' nel mio codice e invece ho inviato una regione compilata con' MKCoordinateRegionMake (location, span) 'e sembra che funzioni per ora. –