2010-04-07 11 views
6

Wenn ich userLocation auf der Karte anzeigen und gleichzeitig den Standort des Benutzers aufzeichnen möchte, ist es eine gute Idee, userLocation.location einen Beobachter hinzuzufügen und die Standorte aufzuzeichnen, ODER sollte Ich benutze CLLocationManager immer noch zum Aufzeichnen des Benutzerstandorts und verwende mapView.showUserLocation, um den aktuellen Standort des Benutzers anzuzeigen (blauer Indikator)? Ich möchte den blauen Standardindikator anzeigen, der von der MapKit-API unterstützt wird.iPhone Entwicklung - CLLocationManager vs. MapKit

Auch hier ist ein grober Beispielcode:

- (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 
    // ... 
} 

Unter der Haube, ich denke, MKMapView verwendet CLLocationManager auch Benutzer des aktuelle Lage zu bekommen? Also, wird dies irgendwelche Probleme verursachen, weil ich glaube, dass sowohl CLLocationManager als auch MapView versuchen werden, dieselben Standortdienste zu verwenden? Wird es Konflikte und fehlende genaue/erforderliche oder aktuelle Daten geben?

Antwort

1

Sehen Sie diese SO entry: CLLocationManager verwendet die gleichen Daten über alle seine Instanzen, so dass es keinen Konflikt gibt.

+1

Wenn wir showUserLocation jedoch auf TRUE setzen und einen CLLocationManager in unserer benutzerdefinierten Klasse erstellen, erstellen wir im Wesentlichen zwei Instanzen von CLLocationManager - einen, der von MKMapView verwendet wird, und einen in Ihrer benutzerdefinierten Klasse. Wer erhält die Standortaktualisierungen? Der Beobachter bei userLocation.location oder der Methode didUpdateLocation: delegate? Wenn ich die Aufnahmeorte in beiden aufnehme, sind die aufgenommenen Orte synchron? – Mustafa

+2

Anscheinend können Sie mehrere Standort-Manager haben, die Ihnen genaue Informationen geben. Obwohl MapKit CLLocationManager unter der Haube verwendet, erzeugt das Erstellen eines CLLocationManagers und seine Verwendung mit MapKit keine Konflikte. – Mustafa