Come seguire posizione dell'utente con MapKit

voti
10

Sto usando MapKit per visualizzare la posizione dell'utente rispetto a perni intorno a loro. Mi piacerebbe essere in grado di imitare la funzionalità che fornisce Maps tramite il pulsante mirino nell'angolo inferiore sinistro dello schermo. Sono già a conoscenza che MapKit fornisce un oggetto CLLocation con la posizione dell'utente tramite MKUserLocation, volevo solo chiedere consiglio su come dovrei continuare a concentrarsi su quella posizione. La mia inclinazione iniziale era quello di utilizzare un NSTimer per centrare la mappa su quel coordinata ogni 500ms o giù di lì.

C'è un modo migliore per fare questo? C'è qualcosa di costruito per MapKit che mi manca che sarà raggiungere questo obiettivo?

Grazie mille, Brendan

È pubblicato 14/03/2010 alle 02:09
fonte dall'utente
In altre lingue...                            


4 risposte

voti
39

Se siete su IOS5 + Questo è molto facile. Basta cambiare il "userTrackingMode" utilizzando il codice come ad esempio:

[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];

In questo modo agevolmente seguire gli utenti posizione corrente. Se si trascina la mappa sarà anche impostare la modalità di tracciamento di nuovo a MKUserTrackingModeNoneche di solito è il comportamento desiderato.

Risposto il 20/04/2013 a 10:40
fonte dall'utente

voti
12

E 'davvero semplice per avere la mappa aggiornare la posizione dell'utente automaticamente proprio come le mappe di Google. Basta impostare showsUserLocation su YES

self.mapView.showsUserLocation = YES

... e quindi implementare il MKMapViewDelegate per centrare nuovamente la mappa quando la posizione viene aggiornata.

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

E per consentire all'utente di ingrandire e pan senza rubare la vista di nuovo alla posizione corrente ...

-(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];
}
Risposto il 01/09/2010 a 02:42
fonte dall'utente

voti
7

Penso che avrei effettivamente utilizzare il CoreLocation CLLocationManagere usare il suo metodo delegato locationManager:didUpdateToLocation:fromLocation:.

In questo modo, non hanno l'overhead di una NSTimer, e si aggiorna solo quando c'è una posizione nuova disposizione.

Si può tirare la longitudine e la latitudine dalla CLLocationoggetto inviato al locationManager:didUpdateToLocation:fromLocation:metodo e passarlo alla visualizzazione della mappa.

Risposto il 14/03/2010 a 05:24
fonte dall'utente

voti
0

Vado con la risposta di Jacob Relkin. Questa esercitazione fornisce una procedura step-by-step di usare CoreLocation in un'applicazione per iPhone. Spero che questo ti aiuta.

Ti auguro il meglio.

Risposto il 14/03/2010 a 06:17
fonte dall'utente

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