2009-09-15 8 views
4

Aaaarg ... ok, calmons-moi.MKMapView: setRegion ne fonctionne pas!

Est-ce que quelqu'un a eu un problème avec la définition de la région d'un MKMapView? Ça n'a jamais marché 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); 
} 

Retours 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

Répondre

12

ne comprends pas exactement les journaux précédents, mais je savoir où était mon erreur.

Le instancied MKMapView n'a pas été initialisées avec un cadre, mais avec un autoresizingMask réglé sur> 0.

Lorsque la méthode setRegion a été appelé, mon avis n'a pas encore été encadrée. Je pense que les valeurs de la région sont calculées en fonction du cadre de vue, donc ces valeurs n'ont pas pu être trouvées. Il suffit de définir le cadre avant de faire un setRegion, et il affichera normalement.

Au revoir!

+0

En effet. Je fixais la région d'un mapView dans 'viewDidLoad' du contrôleur, mais hélas la taille de l'image était (0,0). La définition de la région n'a aucun effet tant que le cadre de la vue n'est pas établi (apparemment). Le cadre doit être défini au moment où 'viewDidAppear' est appelé. – wcochran

+0

merci pour cela, vous venez de sauver une autre nuit de tirage de cheveux. Fait intéressant, je suivais un tutoriel de Ray Wenderlich qui disait que viewWillAppear fonctionnerait, mais pas pour moi. Je ne sais pas pourquoi, mais viewDidAppear a fait l'affaire! – gdbj

+0

C'est magnifique! +1 – Eduardo

1

Votre premier journal utilise self.region.center.latitude , mais je ne vois pas cela nulle part dans votre appel à MKCoordinateRegionMake Le journal vous dit que tout ce que vous utilisez pour faire la région à définir, a un lat/long de 0/0 ...

+0

[[[emplacement_auto_utilisateur] emplacement] coordonnée] doit renvoyer le lat/long de la position de l'utilisateur. Le premier argument de MKCoordinateRegionMake doit définir le lat/long de la position de l'utilisateur, qu'il reste 0/0 ... – Martin

1

La définition du masque de réinitialisation automatique m'a aidé.

[_mapView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];