2010-04-07 27 views
6

Si quiero mostrar UserLocation en el mapa, y al mismo tiempo registrar la ubicación del usuario, ¿es una buena idea agregar un observador a userLocation.location y registrar las ubicaciones, O debería Todavía uso CLLocationManager para registrar la ubicación del usuario y uso mapView.showUserLocation para mostrar la ubicación actual del usuario (indicador azul). Quiero mostrar el indicador azul predeterminado compatible con la API de MapKit.Desarrollo de iPhone - CLLocationManager vs. MapKit

Además, aquí hay un código de ejemplo áspera:

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

Bajo el capó, creo que también utiliza MKMapView CLLocationManager para obtener la ubicación actual del usuario? Entonces, ¿creará algún problema porque creo que tanto CLLocationManager como MapView intentarán usar los mismos servicios de ubicación? ¿Habrá algún conflicto y falta de información precisa/requerida o actual?

Respuesta

1

Consulte esto SO entry: CLLocationManager utiliza los mismos datos en todas sus instancias, por lo que no hay conflicto.

+1

Pero si establecemos showUserLocation en TRUE y creamos un CLLocationManager en nuestra clase personalizada, básicamente estamos creando dos instancias de CLLocationManager, una utilizada por MKMapView y otra en su clase personalizada. ¿Quién recibirá las actualizaciones de ubicación? El observador en userLocation.location o didUpdateLocation: ¿delegar método? Si comienzo a grabar las ubicaciones en ambos, ¿las ubicaciones grabadas estarán sincronizadas? – Mustafa

+2

Aparentemente, puede tener varios Administradores de ubicación y ellos le darán información precisa. Aunque MapKit también utiliza CLLocationManager bajo el capó, crear un CLLocationManager y usarlo con MapKit no creará ningún conflicto. – Mustafa

Cuestiones relacionadas