Comment suivre l'emplacement de l'utilisateur avec MapKit

voix
10

J'utilise MapKit pour afficher l'emplacement de l'utilisateur par rapport aux broches autour d'eux. Je voudrais être en mesure d'imiter la fonctionnalité Maps fournit via le bouton en forme de croix dans le coin inférieur gauche de l'écran. Je suis déjà au courant que MapKit fournit un objet CLLocation avec l'emplacement de l'utilisateur via MKUserLocation, je voulais juste demander des conseils sur la façon dont je garder le focus sur cet emplacement. Ma première tendance était d'utiliser un NSTimer pour centrer la carte sur cette coordonnée toutes les 500ms environ.

Y a-t-il une meilleure manière de faire cela? Y at-il quelque chose de construit pour MapKit que je suis absent qui accomplira cela?

Merci beaucoup, Brendan

Créé 14/03/2010 à 02:09
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
39

Si vous êtes sur IOS5 + ce qui est très facile. Il suffit de changer le « userTrackingMode » en utilisant un code tel que:

[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];

Cela facilement suivre les utilisateurs emplacement actuel. Si vous faites glisser la carte elle même régler le mode de suivi de retour à ce MKUserTrackingModeNonequi est généralement le comportement que vous voulez.

Créé 20/04/2013 à 10:40
source utilisateur

voix
12

Il est vraiment simple d'avoir la carte mise à jour l'emplacement de l'utilisateur automatiquement tout comme les cartes Google. Il suffit de mettre showsUserLocation OUI

self.mapView.showsUserLocation = YES

... puis mettre en œuvre le MKMapViewDelegate de re-centrer la carte lorsque l'emplacement est mis à jour.

-(void)               mapView:(MKMapView *)mapView 
        didUpdateUserLocation:(MKUserLocation *)userLocation
{
    if( isTracking )
    {
        pendingRegionChange = YES;
        [self.mapView setCenterCoordinate: userLocation.location.coordinate
                                 animated: YES];
    }
}

Et pour permettre à l'utilisateur de zoomer et panoramique sans voler la vue à l'emplacement actuel ...

-(void) mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
    if( isTracking && ! pendingRegionChange )
    {
         isTracking = NO;
         [trackingButton setImage: [UIImage imageNamed: @"Location.png"] 
                         forState: UIControlStateNormal];
    }

    pendingRegionChange = NO;
}

-(IBAction) trackingPressed
{
    pendingRegionChange = YES;
    isTracking = YES;
    [mapView setCenterCoordinate: mapView.userLocation.coordinate 
                        animated: YES];

    [trackingButton setImage: [UIImage imageNamed: @"Location-Tracking.png"] 
                    forState: UIControlStateNormal];
}
Créé 01/09/2010 à 02:42
source utilisateur

voix
7

Je pense que je fait utiliser le CoreLocation CLLocationManageret utiliser sa méthode déléguée locationManager:didUpdateToLocation:fromLocation:.

De cette façon, vous n'avez pas les frais généraux d'un NSTimer, et il met à jour seulement quand il y a un nouvel emplacement disponible.

Vous pouvez tirer la longitude et la latitude de l' CLLocationobjet envoyé à la locationManager:didUpdateToLocation:fromLocation:méthode et le transmettre à la vue de la carte.

Créé 14/03/2010 à 05:24
source utilisateur

voix
0

Je vais avec la réponse de Jacob Relkin. Ce tutoriel fournit une procédure étape par étape d'utilisation CoreLocation dans une application iPhone. Espérons que cela vous aide.

Bonne chance.

Créé 14/03/2010 à 06:17
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more