iOS : Ejercicio 11.Usar CLLocation para hayar nuestra localización

Blog >Lista ejercicios >  Ejercicio 11


Hola developers, seguimos con el tutorial de ejercicios



iOS : Ejercicio 11 : Cómo averiguar una localización.

Vamos a crear un nuevo proyecto de la forma habitual file - new - proyect - Single View Aplicattion. Ahora clickamos en el proyecto y vamos a importar el framework de la localización, esto se hace en la pestaña Build Phases Link Binary With Libraries, damos al botón + y buscamos el framework Core Location para importarlo al proyecto :





Perfecto, vamos al storyboard y ponemos en la View Controller así con sus pertinentes conexiones, el botón, vamos a ponerle IBOutlet para cambiar su apariencia y para el evento onclick mediante action,tambien creamos una variable "Inicializada" para verificar que se ha hay el software específico en el teléfono, es decir que se carga el método viewDidLoad, y otra "Empezada "para partir del supuesto de que no ha sido empezada el cálculo de coordenadas. Además importamos el framework CoreLocation y le vamos a hacer que sea delegado :





Hemos creado un objeto CLlocationManager, que permite indicar la frecuencia y la precisión usadas para obtener información del dispositivo a cerca de su ubicación.

#import 
#import 

@interface ViewController : UIViewController
{
    
    __weak IBOutlet UILabel *valorLatitud;
    __weak IBOutlet UILabel *valorLongitud;
    __weak IBOutlet UIButton *aparienciaBoton;
}
- (IBAction)accionBoton:(id)sender;

@property BOOL Inicializada;
@property BOOL Empezada;
//OBJETO PARA GUARDAR LA LOCALIZACION
@property (strong, nonatomic) CLLocationManager *Localizacion;

@end



@implementation ViewController

@synthesize Localizacion;
@synthesize Inicializada;
@synthesize Empezada;


- (void)viewDidLoad
{
    [super viewDidLoad];
    Inicializada =YES;
    
    [aparienciaBoton setTitle:@"Calcular" forState:UIControlStateNormal];
   //PARTIMOS DE LA BASE DE QUE NO ESTA INICIALIZADA
    Empezada=NO;
    
    Localizacion = [[CLLocationManager alloc]init];
    //INDICAMOS QUE EL DELEGADO SE ENCUENTRA EN LA CLASE
    Localizacion.delegate=self;
    //CREAMOS EL MENSAJE DE VERIFICACION DEL USUARIO PARA QUE ACEPTE
    Localizacion.purpose = @"Aplicación que muestra la posición";
    
    
 // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
//FUNCION PARA ERRORES
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
    
    if (error.code==kCLErrorDenied) {
        Inicializada=NO;
        [Localizacion stopUpdatingLocation];
    }
}

//ACCION DEL BOTON
- (IBAction)accionBoton:(id)sender {
    //SINO ESTA INICIALIZADA NO HACEMOS NADA
    if (Inicializada == NO) {
        return;
    }else{
        if (Empezada ==NO) {
            [aparienciaBoton setTitle:@"Detener Cálculo" forState:UIControlStateNormal];
            //ACTUALIZAMOS LOCALIZACION
            [Localizacion startUpdatingLocation];
            Empezada=YES;
            return;
        }else{
            [aparienciaBoton setTitle:@"Comenzar Cálculo" forState:UIControlStateNormal];
            [Localizacion stopUpdatingLocation];
            Empezada=NO;
            return;
        }
    }
    
}
@end



Ahora vamos a usar la función didUpdateLocations, si no hubiéramos declarado como delegada la misma clase no podríamos usar esta función, es la que se usa cada vez que se actualiza el objeto CLLocationManager, ahí es donde tenemos que tratar los labels del storyboard para que muestre las coordenadas correctamente :

//METODO PARA ACTUALIZAR LOS LABEL DE LA LATITUD Y LONGITUD
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
    //Cogemos el primer elemento del array que es donde estan los datos en el
    //objeto Localizacion
    CLLocation *loc = [locations objectAtIndex:[locations count]-1];
    //Cogemos latitud y longitud
    float latitud=loc.coordinate.latitude;
    float longitud=loc.coordinate.longitude;
    
    valorLatitud.text = [NSString stringWithFormat:@"%2.3f",latitud];
    valorLongitud.text = [NSString stringWithFormat:@"%2.3f",longitud];
    
    
}


Ejecutamos la alicación...










Compartir Compartir Compartir Compartir




Thebestandroide Indice Thebestandroide Ejercicio anterior Thebestandroide Siguiente ejercicio

0 comentarios:

Publicar un comentario