2010-04-07 16 views
6

Se voglio mostrare la posizione utente sulla mappa e allo stesso tempo registrare la posizione dell'utente, è una buona idea aggiungere un osservatore a posizioneUtente.location e registrare le posizioni, OPPURE utilizzo ancora CLLocationManager per registrare la posizione dell'utente e utilizzare mapView.showUserLocation per mostrare la posizione corrente dell'utente (indicatore blu)? Voglio mostrare l'indicatore blu predefinito supportato dall'API MapKit.Sviluppo iPhone - CLLocationManager vs. MapKit

Inoltre, ecco un esempio di codice di massima:

- (void)viewDidLoad { 
    ... 

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

    myMapView.showUserLocation = YES; 
    [myMapView addObserver:self forKeyPath:@"userLocation.location" options:0 context:nil]; 

    ... 
} 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    // Record the location information 
    // ... 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    NSLog(@"%s begins.", __FUNCTION__); 

    // Make sure that the location returned has the desired accuracy 
    if (newLocation.horizontalAccuracy <= manager.desiredAccuracy) 
     return; 

    // Record the location information 
    // ... 
} 

Sotto il cofano, penso MKMapView inoltre usa CLLocationManager per ottenere la posizione corrente dell'utente? Quindi, questo creerà problemi perché credo che sia CLLocationManager che MapView proveranno ad utilizzare gli stessi servizi di localizzazione? Ci saranno conflitti e mancanza di dati accurati/richiesti o attuali?

risposta

1

Vedere questo SO entry: CLLocationManager utilizza gli stessi dati in tutte le sue istanze, quindi non c'è conflitto.

+1

Ma se impostiamo showUserLocation su TRUE e creiamo un CLLocationManager nella nostra classe personalizzata, stiamo essenzialmente creando due istanze di CLLocationManager, una usata da MKMapView e una nella classe personalizzata. Chi otterrà gli aggiornamenti sulla posizione? L'osservatore su userLocation.location o il metodo didUpdateLocation: delegate? Se inizio a registrare le posizioni in entrambi, le posizioni registrate saranno sincronizzate? – Mustafa

+2

Apparentemente, puoi avere più gestori di posizione e ti daranno informazioni accurate. Sebbene MapKit utilizzi anche CLLocationManager sotto il cofano, creare un CLLocationManager e utilizzarlo con MapKit non creerà alcun conflitto. – Mustafa

Problemi correlati