MKMapView setRegion no funciona

Estoy tratando de establecer una región de inicio personalizada en una aplicación de iOS utilizando setRegion de MKMapView. La aplicación funciona bien y aparece un map, pero no importa lo que intente, no puedo cambiar la región. He probado muchos tutoriales y soluciones, pero ninguno funciona. Aquí está mi código:

-(void)viewDidAppear:(BOOL)animated{ MKCoordinateRegion region; MKCoordinateSpan span; span.latitudeDelta = 0.001; span.longitudeDelta = 0.001; region.span = span; region.center.latitude = 100; region.center.longitude = 100; [mapView setRegion:(region) animated:(TRUE)]; } 

Tengo los frameworks de MKMapView y Core Location agregados a los proyectos correctamente, importe MapKit.h y declaro mapView, así que no sé por qué no funciona.

Gracias,

Jacob

Parece que el IBOutlet de la vista del map no está conectado al control de la vista del map en el xib / storyboard.

Si no está conectado, la variable mapView será nil y los methods de llamada no harán nada.

En el xib / storyboard, haga clic derecho en Ver controller y conecte la salida mapView al control de vista de map.


Además, aunque no es necesario solo para configurar la región, también conecta la salida delegate la vista del map al Controlador de vista. Esto será necesario si luego implementa cualquier método de delegación de vista de map. Si esto no se hace, los methods de delegado no serán llamados.

Otro punto aparte:
En su primer ejemplo de código, está configurando el center la región en 100, 100. Tenga en count que se trata de una coorderada no válida. Si la vista del map estaba realmente conectada, al configurar el center esto habría causado un locking con "Región no válida". La latitud debe ser de -90 a +90 (la longitud debe ser de -180 a +180).

Por cierto, la nueva coorderada que estás intentando en el código publicado en el comentario (26, 80) está en India. Dado que está configurando el espacio en un valor relativamente pequeño, tendrá que networkingucir mucho para ver esto.

Sin embargo, se definió como respondido, dejaré aquí un ejemplo de lo que funcionó para mí, cuando no tenía idea de por qué setRegion no funcionaba en absoluto. En mi caso, el problema fue que inicié el MKMapView sin una ttwig, por ejemplo:

 override func viewDidLoad() { ... self.mapView = MKMapView() // Wrong! ... self.mapView.setRegion(...) // Does not work! } 

Parece que toda la región se calcula con respecto a la inicial ( CGRect ). Me funcionó haciendo:

 override func viewDidLoad() { ... self.mapView = MKMapView(frame: CGRect(0, 108, self.mapView.bounds.width, self.mapView.bounds.height)) self.mapView.setRegion(...) // Oh, it works! } 

Este problema también se describió aquí .