2010-04-06 5 views
0

Je fais une application avec une carte dans l'application et un bouton pour passer à l'app google.Map.emplacement actuel trop lent pour la vue

Le code de ma position est:

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation 
     fromLocation:(CLLocation *)oldLocation { 

float avgAccuracy = (newLocation.verticalAccuracy + newLocation.horizontalAccuracy)/2.0; 


if (avgAccuracy < 500) { 
    [locationManager stopUpdatingLocation]; 
    locationManager.delegate = nil; 
} 


storedLocation = [newLocation coordinate]; 

Le code de la vue est:

- (void)viewDidLoad { 
[super viewDidLoad]; 

UIImage *image = [UIImage imageNamed: @"LogoNavBar.png"]; 
UIImageView *imageview = [[UIImageView alloc] initWithImage: image]; 

UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithCustomView: imageview]; 
self.navigationItem.rightBarButtonItem = button; 
[imageview release]; 
[button release]; 

locationManager=[[CLLocationManager alloc] init]; 
locationManager.delegate = self; 
locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
locationManager.distanceFilter = kCLDistanceFilterNone; 
[locationManager startUpdatingLocation]; 


mapView.showsUserLocation = YES; 

NSLog(@"storedLocation-latitude für MKregion: %f", storedLocation.latitude); 

MKCoordinateRegion region; 
region.center.latitude = (storedLocation.latitude + 45.58058)/2.0; 
region.center.longitude = (storedLocation.longitude - 0.546835)/2.0; 
region.span.latitudeDelta = ABS(storedLocation.latitude - 45.58058); 
region.span.longitudeDelta = ABS(storedLocation.longitude + 0.546835); 
[mapView setRegion:region animated:TRUE]; 


MKCoordinateRegion hotel; 
hotel.center.latitude = 45.58058; 
hotel.center.longitude = -0.546835; 


HotelPositionMarker* marker = [[HotelPositionMarker alloc] initWithCoordinate:hotel.center]; 
[mapView addAnnotation:marker]; 
[marker release]; 
} 

Mon problème: quand le début "viewDidLoad", le "storedLocation" est encore 0,0000 il prend un peu plus de temps pour obtenir sa propre position que pour commencer la vue. Le journal de "storedLocation" dans la section "viewDidLoad" est 0 alors que le Log de "storedLocation" dans "- (IBAction)" lorsque la carte est visible contient les bonnes valeurs.

Comment puis-je gérer mes coordonnées avant le chargement de la vue? J'ai besoin d'eux pour centrer la vue concernant la position propre et la position donnée par moi.

MKCoordinateRegion region; 
region.center.latitude = (storedLocation.latitude + 45.58058)/2.0; 
region.center.longitude = (storedLocation.longitude - 0.546835)/2.0; 
region.span.latitudeDelta = ABS(storedLocation.latitude - 45.58058); 
region.span.longitudeDelta = ABS(storedLocation.longitude + 0.546835); 
[mapView setRegion:region animated:TRUE]; 

Répondre

0

Essayez d'obtenir la valeur de locationManager.location pour une valeur initiale, mais il est peut-être vieux ou même nil. Si vous voulez l'emplacement actuel, vous devez attendre CLLocationManager. Même l'application Google Maps attend quelques secondes avant de montrer votre position.

+0

Is est nul :( Mais comment puis-je gérer attendre-t-il un code existe pour mettre en œuvre dans le viewDidLoad attendre 2 secondes – Christian

+0

Je voulais attendre 'didUpdateToLocation:.' Être appelé Faites le reste le truc dans 'viewDidLoad', et par exemple montrer un indicateur d'activité de rotation jusqu'à ce que' didUpdateToLocation: 'soit appelé pour la première fois –

+0

J'ai essayé sans succès, je suis passé de viewDidLoad à viewWillAppear Dans ce cas, quand vous revenez à le menu et appelez à nouveau la vue dans une seconde la position actuelle sera affichée correcte.Mais ce n'est pas la solution .... – Christian

0

Appelez votre locationManager avant d'appeler le viewController avec la carte. Et passez le gestionnaire de position en tant que variables membres du viewController que vous êtes en train d'initialiser et de pousser. Est-ce votre première vue, construisez-le dans le délégué. Pourrait-il fonctionner? ?