2010-01-29 5 views
2

J'ai un MkMapView et je veux garder la carte centrée à l'emplacement de l'utilisateur, exactement comme le fait l'application iPhone Map lorsque vous appuyez sur le bouton de la portée. J'utilise la méthode setCenterCoordinate car je n'ai pas besoin de régler le zoom. Je l'utilise chaque fois que l'emplacement est mis à jour à partir du gestionnaire d'emplacement. Le problème est que, comme elle se met à jour toutes les demi-secondes (aprox), cette méthode "setCenterCoordinate" est appelée tout le temps et l'application devient Type de suspension. Si je dois passer à un onglet à l'écart de l'affichage de la carte, je dois continuer à appuyer sur l'autre onglet pour y parvenir. Eh bien, tout ce texte pour demander s'il y a un moyen approprié de faire en sorte que le MkMapView soit réglé au centre sur l'emplacement de l'utilisateur (point bleu).iPhone MkMapView verrouiller le centre à userlocation

Merci

Répondre

7

J'ai déjà décrit une meilleure façon pour obtenir des mises à jour de userLocation.location propriété de MKMapView par les notifications KVO au lieu d'utiliser un autre gestionnaire de l'emplacement. How do I zoom an MKMapView to the users current location without CLLocationManager?

Bien sûr, vous devez apporter des modifications à la méthode qui reçoit les notifications KVO. Quelque chose comme ça:

-(void)observeValueForKeyPath:(NSString *)keyPath 
        ofObject:(id)object 
         change:(NSDictionary *)change 
         context:(void *)context { 

    if ([self.mapView isUserLocationVisible]) { 
     [self.mapView setCenterCoordinate:self.mapView.userLocation.location.coordinate 
           animated:YES]; 
    } 
} 

J'ai testé ce code et cela fonctionne très bien.

0

En plus de la réponse de ddnv:

Ne jamais oublier d'arrêter l'observateur dans la viewWillDisappear de ViewController (ou viewDidUnload dans < iOS 6.0) Méthode comme ça:

[self.mapView.userLocation removeObserver:self forKeyPath:@"location"]; 

Sinon, votre application se bloque dur .

Questions connexes