MKMapView: setRegion ne fonctionne pas!
-
07-07-2019 - |
Question
Aaaarg ... ok, calmons-moi moi-même.
Quelqu'un a-t-il eu du mal à définir la région d'un MKMapView? Cela n'a jamais fonctionné avec moi.
Ce code:
-(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);
}
Renvoie ce journal:
30.145127, -40.078125 - 0.000000, 0.000000
0.000000, 0.000000 - 0.500000, 0.500000
0.000000, 0.000000 - 0.000000, 0.000000
Savez-vous pourquoi ??!
Merci beaucoup, vous pouvez me sauver de me tuer X (
Mart
EDIT: Bien sûr, je suis sur l'appareil, connecté à Internet.
La solution
Je ne comprends pas exactement les journaux précédents, mais je sais où était mon erreur.
MKMapView instancié n'a pas été initialisé avec un cadre, mais avec un autoresizingMask défini sur > 0.
Lorsque la méthode setRegion a été appelée, ma vue n'était pas encore encadrée. Je pense que les valeurs de région sont calculées en fonction du cadre de la vue. Ces valeurs sont donc introuvables.
Il suffit de définir le cadre avant de faire un setRegion, et il s'affichera normalement.
Au revoir!
Autres conseils
Votre premier journal utilise self.region.center.latitude
, mais je ne le vois nulle part dans votre appel à MKCoordinateRegionMake
. Le journal vous indique que tout ce que vous utilisez pour définir la région à définir a une valeur lat / long de 0/0 ...
La définition du masque de redimensionnement automatique m'a aidée.
[_mapView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];