MKMapView: setRegion non funziona!
-
07-07-2019 - |
Domanda
Aaaarg ... ok, calmiamoci.
Qualcuno ha avuto problemi con l'impostazione dell'area di un MKMapView? Non ha mai funzionato con me.
Questo codice:
-(void)setUserCenteredSpan:(MKCoordinateSpan)span{ // for this example, span = {0.5, 0.5}
// Current region (just initialised)
NSLog(@"%f, %f - %f, %f", self.region.center.latitude,
self.region.center.longitude,
self.region.span.latitudeDelta,
self.region.span.longitudeDelta);
// New Region
MKCoordinateRegion region = MKCoordinateRegionMake([[[self userLocation] location] coordinate],
span);
NSLog(@"%f, %f - %f, %f", region.center.latitude,
region.center.longitude,
region.span.latitudeDelta,
region.span.longitudeDelta);
// Region saved in MKMapView
[self setRegion:region animated:NO];
NSLog(@"%f, %f - %f, %f", self.region.center.latitude,
self.region.center.longitude,
self.region.span.latitudeDelta,
self.region.span.longitudeDelta);
}
Restituisce quel registro:
30.145127, -40.078125 - 0.000000, 0.000000
0.000000, 0.000000 - 0.500000, 0.500000
0.000000, 0.000000 - 0.000000, 0.000000
Sai perché ??!
Grazie mille, puoi salvarmi dall'uccidermi X (
Mart
EDIT: ovviamente, sono sul dispositivo, connesso a Internet.
Soluzione
Non capisco esattamente i registri precedenti, ma so dov'era il mio errore.
L'MKMapView istanziato non è stato inizializzato con un frame, ma con un autoresizingMask impostato su > 0.
Quando è stato chiamato il metodo setRegion, la mia vista non era ancora inquadrata. Penso che i valori della regione siano calcolati in base al frame della vista, quindi questi valori non sono stati trovati.
Basta impostare il frame prima di eseguire un setRegion e verrà visualizzato normalmente.
Ciao!
Altri suggerimenti
Il tuo primo registro utilizza self.region.center.latitude
, ma non vedo che da nessuna parte nella tua chiamata a MKCoordinateRegionMake
. Il registro ti dice che qualunque cosa tu stia usando per impostare la regione da impostare, ha un lat / long di 0/0 ...
L'impostazione della maschera di ridimensionamento automatico mi ha aiutato.
[_mapView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];