Este código establece un nivel de zoom predeterminado centrado en una ubicación específica en viewDidLoad
. El código funciona bien en las versiones anteriores de iOS:MapView en iOS6 no mostrará ciertos niveles de zoom en latitud> 75 norte
CLLocationDistance visibleDistance = 100000; // 100 kilometers
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, visibleDistance, visibleDistance);
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:region];
.
.
.
[mapView setRegion:adjustedRegion animated:NO];
Sin embargo, en iOS 6 para las ubicaciones con la latitud por encima de ~ 75 (> 75,1) la aplicación se bloquea con el siguiente mensaje:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Invalid Region <center:nan, nan span:nan, nan>'
He encontrado que para el nivel de zoom dado mapView
no se puede establecer correctamente un MKCoordinateRegion
internamente. [mapView regionThatFits:region]
devuelve todos los valores como nan
. Si uso la variable region
directamente, solo muestra el mapa predeterminado (todo el mundo).
Después de algunas pruebas, encontré que ajustando el visibleDistance
puedo hacer que el código funcione correctamente. La distancia mágica parece estar ligeramente por encima de 20 kilómetros (en algún lugar entre 22 y 23 km para una serie de latitudes y valores de LatitudDelta). Esto ocurre solo en las latitudes del norte (-80 funciona bien).
Los mapas funcionan en cualquier ubicación después del posicionamiento inicial. Parece que Apple cambió la forma en que se inicializaron las regiones de mapas visibles. Estoy utilizando un nivel de zoom más alto para la región afectada como una solución alternativa. ¿Hay alguna otra manera de hacerlo funcionar correctamente?
Trate de no usar regionThatFits para generar una MKCoordinateRegion. En iOS 6, noto que no funciona como esperaba (creo que esto es un error). En su lugar, cree MKCoordinateSpan para crear una MKCoordinateRegion. Luego configura la región de la vista del mapa a eso. Finalmente use setCenterCoordinate para configurar la posición central de la vista del mapa. –
Pero necesito saber la 'MKCoordinateRegion' que se mostrará en la pantalla para configurar parámetros adicionales que controlen la carga parcial de ubicaciones. Además, si utilizo un 'MKCoordinateSpan' mostraría los niveles de zoom variables variables en función de la latitud (a menos que lo compense manualmente). 'MKCoordinateRegionMakeWithDistance()' funciona como debería, pero el problema está en el método que inicializa 'mapView' con la región, porque el problema es evidente cuando uso' setRegion: 'directamente (sin' regionThatFits: ') (el mapa muestra El mundo entero). – Neur0mans3r
Estaba teniendo este problema. Cuando busqué mi mapView, su fotograma fue 0,0,0,0. No estoy seguro si este fue el problema. Eliminé la llamada 'regionThatFits' en mi código y, en su lugar, envié una región construida con' MKCoordinateRegionMake (location, span) 'y parece funcionar ahora para mí. –