2011-04-22 30 views
11

Tengo un MKMapView y en la vista de mapa está configurado "Mostrar ubicación de usuario". La pregunta de si la aplicación debería usar mi ubicación, digo que sí. Luego veo la bala azul y puedo acercarme a la ubicación actual.MKMapView: en la ubicación del usuario de inicio -> zoom

He leído muchas otras publicaciones sobre esto, pero nada resuelve el problema, que la ubicación del usuario no se ampliará automáticamente.

Quiero tener un zoom en el inicio si el usuario permite el acceso a la ubicación; de lo contrario, una coordenada definida debería acercarse. (Después, el uso permite la ubicación, se puede actualizar, pero no debe establecer el centro la ubicación del usuario cada vez que recibo actualizaciones sobre la ubicación).

¿Cuáles son los pasos para implementar este comportamiento? Intenté por ejemplo esto: How do I zoom an MKMapView to the users current location without CLLocationManager? con el KVO pero no funciona ...

Espero que alguien tenga una idea?

Best Regards, Tim

+0

Para iOS 5.0 y superior: [setUserTrackingMode MapView: MKUserTrackingModeFollow Animación: YES]; – Arjan

Respuesta

24

¿Usted ha intentado el método delegado MAPview: didUpdateUserLocation :?

he usado algo como esto en mi código:

En el archivo .h:

@property (nonatomic, retain) CLLocation* initialLocation; 

Y en el archivo .m:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
    if (!initialLocation) 
    { 
     self.initialLocation = userLocation.location; 

     MKCoordinateRegion region; 
     region.center = mapView.userLocation.coordinate; 
     region.span = MKCoordinateSpanMake(0.1, 0.1); 

     region = [mapView regionThatFits:region]; 
     [mapView setRegion:region animated:YES]; 
    } 
} 
+0

Tengo mi error, funciona en 4.x pero no en 3.x. :-(Pero, ¿cómo puedo establecer las coordenadas en un lugar fijo si userLocation no está disponible (porque no hay GPS o el usuario no permite usar la ubicación)? – Tim

+0

'mapView: didUpdateUserLocation:' está disponible en iOS 4.0 y posterior , por lo que está de suerte si tiene como objetivo 3.x. –

+1

Hice cosas similares en mi aplicación, pero en orden diferente. Acerco a una ubicación predeterminada PRIMERO. Luego, si el usuario lo permite y el GPS obtiene una solución, zoom a la ubicación del usuario. De lo contrario, el mapa permanece en la ubicación predeterminada y no ocurre nada. ¿Tiene sentido en su situación? –

2

que puede hacerlo de esta manera en su viewDidLoad escriba este código

self.mapDetail.showsUserLocation = YES; 
[self.mapDetail.userLocation addObserver:self 
          forKeyPath:@"location" 
           options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) 
           context:nil]; 

y este método va a hacer la tarea

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
    MKCoordinateRegion region; 
    region.center = self.mapDetail.userLocation.coordinate; 

    MKCoordinateSpan span; 
    span.latitudeDelta = 1; // Change these values to change the zoom 
    span.longitudeDelta = 1; 
    region.span = span; 

    [self.mapDetail setRegion:region animated:YES]; 
    [self.mapDetail.userLocation removeObserver:self forKeyPath:@"location"]; 
} 
Cuestiones relacionadas