Cómo seguir la ubicación del usuario con MapKit

votos
10

Estoy usando MapKit para mostrar la ubicación del usuario en relación con alfileres alrededor de ellos. Me gustaría ser capaz de imitar la funcionalidad que proporciona mapas a través del botón en forma de cruz en la esquina inferior izquierda de la pantalla. Ya estoy consciente de que MapKit proporciona un objeto CLLocation con la ubicación del usuario a través de MKUserLocation, sólo quería buscar consejo sobre cómo debería mantener el foco en ese lugar. Mi inclinación inicial era utilizar un NSTimer a centrar el mapa en que coordinan cada 500 ms o menos.

¿Hay una mejor manera de hacer esto? ¿Hay algo integrado en MapKit que me falta que hará esto?

Muchas gracias, Brendan

Publicado el 14/03/2010 a las 02:09
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
39

Si estás en iOS5 + Esto es muy fácil. Sólo cambia el "userTrackingMode" utilizando un código como:

[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];

Esto sin problemas a los usuarios seguir ubicación actual. Si arrastra el mapa que será incluso establecer el modo de seguimiento de vuelta a MKUserTrackingModeNonelo que suele ser el comportamiento que desea.

Respondida el 20/04/2013 a las 10:40
fuente por usuario

votos
12

Es muy simple para tener una actualización de mapas de la ubicación del usuario de forma automática al igual que los mapas de Google. Basta con establecer showsUserLocation a YES

self.mapView.showsUserLocation = YES

... y luego poner en práctica el MKMapViewDelegate para volver a centrar el mapa cuando se actualiza la ubicación.

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

Y permitir al usuario hacer zoom y pan sin robar la vista de nuevo a la ubicación actual ...

-(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];
}
Respondida el 01/09/2010 a las 02:42
fuente por usuario

votos
7

Creo que iba a utilizar realmente el CoreLocation CLLocationManagery utilizar su método delegado locationManager:didUpdateToLocation:fromLocation:.

De esta manera, usted no tiene la sobrecarga de una NSTimer, y sólo se actualiza cuando hay una nueva ubicación disponible.

Puede tirar de la longitud y latitud del CLLocationobjeto enviado al locationManager:didUpdateToLocation:fromLocation:método y pasarlo a la vista del mapa.

Respondida el 14/03/2010 a las 05:24
fuente por usuario

votos
0

Voy con la respuesta de Jacob Relkin. Este tutorial proporciona un procedimiento paso a paso de la utilización de CoreLocation en una aplicación iPhone. Espero que esto te ayude.

Todo lo mejor.

Respondida el 14/03/2010 a las 06:17
fuente por usuario

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