sensores - ua€¦ · experto en desarrollo de aplicaciones para dispositivos móviles © 2012-13...

Post on 30-May-2020

4 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-13 Depto. Ciencia de la Computación e IA

Sensores

Sesión 3: Sensores en iOS

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Índice de contenidos• Pantalla táctil• Gestión de eventos de entrada• Reconocimiento de gestos multitáctiles

• Acelerómetro• Implementación

• Giroscopio• Implementación

• Brújula• Implementación

• GPS• Implementación

• Proximidad y sensor de luz ambiente• Implementación

2

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Pantalla táctil• Pantalla táctil• Gestión de eventos de entrada• Reconocimiento de gestos multitáctiles

3

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Gestión de eventos de entrada (1)• Sensor más usado• Eventos de entrada básicos implementados por defecto en UIKit• Uso en tablas (selección de celdas, arrastre...)• Botones• etc.

• Captura de eventos de entrada (Touch Events):• Implementación de los siguientes métodos:

4

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Gestión de eventos de entrada (2)• Obtener posición de la pulsación:

• Comprobaciones:• ¿Hemos pulsado dentro de un objeto?

Devuelve true si el rectángulo contiene el punto

5

UITouch *touch = [touches anyObject];CGPoint loc = [touch locationInView:self.view];

CGRectContainsPoint(objeto.frame, loc)

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Pantalla táctil• Pantalla táctil• Gestión de eventos de entrada• Reconocimiento de gestos multitáctiles

6

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Gestos multitáctiles• Clases UIGestureRecognizer• Implementar el protocolo UIGestureRecognizerDelegate

• Tipos de gestos:• Toque simple: UITapGestureRecognizer• Pellizco: UIPinchGestureRecognizer• Rotación: UIRotationGestureRecognizer• Movimiento lateral: UISwipeGestureRecognizer• Pulsar y arrastrar: UIPanGestureRecognizer• Pulsado largo: UILongPressGestureRecognizer

7

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

UITapGestureRecognizer• Toque sencillo en pantalla.• Definición:

• Detección:

8

UITapGestureRecognizer * recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];recognizer.delegate = self;[self.imagen addGestureRecognizer:recognizer];

- (void)handleTap:(UITapGestureRecognizer *)recognizer { NSLog(@"Hemos tocado la imagen");}

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

UIPinchGestureRecognizer• Gesto de pellizcar• Definición:

• Detección:

9

UIPinchGestureRecognizer *recognizerPinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];

recognizerPinch.delegate = self;[self.imagenLogo addGestureRecognizer:recognizerPinch];

- (void)handlePinch:(UIPinchGestureRecognizer *)recognizer { recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);

recognizer.scale = 1; }

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

UIRotationGestureRecognizer• Gesto de rotación (uso de los dos dedos)• Definición:

• Detección:

10

UIRotationGestureRecognizer *recognizerRotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotate:)]; recognizerRotation.delegate = self; [self.imagenLogo addGestureRecognizer:recognizerRotation];

- (void)handleRotate:(UIRotationGestureRecognizer *)recognizer { recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation); }

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

UISwipeGestureRecognizer• Gesto de arrastre lateral• Definición:

• Detección:

11

UISwipeGestureRecognizer *pressGestureLeft = [[[UISwipeGestureRecognizer alloc] initWithTarget: self action:@selector(handleSwipe:)];

[pressGestureLeft setDirection:UISwipeGestureRecognizerDirectionLeft];[self.view addGestureRecognizer:pressGestureLeft];

- (void) handleSwipe:(UISwipeGestureRecognizer *)recognizer {

if (gesture.direction == UISwipeGestureRecognizerDirectionLeft){

//Implementamos la acción } }

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

UIPanGestureRecognizer• Gesto de pulsar y arrastrar• Definición:

• Detección:

12

UIPanGestureRecognizer * recognizerPan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];recognizerPan.delegate = self;[self.imagenLogo addGestureRecognizer:recognizerPan];

- (void)handlePan:(UIPanGestureRecognizer *)recognizer { CGPoint translation = [recognizer translationInView:self.view];

recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y); [recognizer setTranslation:CGPointMake(0, 0) inView:self.view]; }

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

UILongPressGestureRecognizer• Gesto de pulsación larga• Definición:

• Detección:

13

UILongPressGestureRecognizer *gestureRecognizer=[[UILongPressGestureRecognizer alloc] initWithTarget: self action:@selector(handleLongGesture:)];

[view addGestureRecognizer:gestureRecognizer];

- (void) handleLongGesture:(UILongPressGestureRecognizer *)recognizer { //Implementar acción... }

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Acelerómetro• Acelerómetro• Implementación

14

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Acelerómetro• Sensor mediante el cual obtenemos la aceleración según la

inclinación del dispositivo.• Cambios en los tres ejes: x, y, z• Movimientos: rotación e inclinación • Uno de los sensores más usados en iOS.• API muy sencilla de usar.

15

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Implementación (1)• Clase UIAccelerometer• API: http://developer.apple.com/library/ios/#DOCUMENTATION/

UIKit/Reference/UIAccelerometer_Class/Reference/UIAccelerometer.html

• Uso del singleton sharedAccelerometer• Definiremos el protocolo UIAccelerometerDelegate• Intervalo de tiempo determinado: (en segundos)

• Lo habitual: intervalo de cálculo cada 0.01 segundos.• A mayor frecuencia de cálculo -> menor rendimiento, mayor

precisión.

16

[[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / 60.0f)];

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Implementación (2)• Implementación del protocolo UIAccelerometerDelegate

17

// Movemos una pelota por la pantalla

-(void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration { /* NSLog(@"x: %g", acceleration.x); NSLog(@"y: %g", acceleration.y); NSLog(@"z: %g", acceleration.z); */

_delta.x = acceleration.x * 10; _delta.y = acceleration.y * 10;

_pelota.center = CGPointMake(_pelota.center.x + _delta.x, _pelota.center.y + _delta.y);

}

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Ejemplos de uso (1)• Muy usado en juegos: • Ejemplo: volante para controlar un coche. Real Racing

18

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Ejemplos de uso (2)• Juego Labyrinth 2:• Vídeo: http://www.youtube.com/watch?v=_GEpwCqGZ54

19

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Giroscopio• Giroscopio• Implementación

20

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Giroscopio• Detecta la rotación del dispositivo sobre sí mismo.• Calcula la velocidad angular en los 3 ejes (x, y, z).• Permite saber “hacia donde” está orientado el dispositivo,

detecta los giros.• Complemento ideal para el acelerómetro:• Detección de movimiento en 6 ejes.• Acelerómetro: Detecta la aceleración en los 3 ejes.• Giroscopio: Detecta la orientación en los 3 ejes.

• Disponible a partir del iPhone 4, iPad 2.• Usado principalmente en juegos 3D.

21

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Implementación (1)• Framework: CoreMotion.framework• Clase: CMMotionManager• Iniciar el sensor del giroscopio:

• Timer para actualizar los valores del giroscopio:

22

[self.motionManager startGyroUpdates];

self.timer = [NSTimer scheduledTimerWithTimeInterval:1/30.0 target:self selector:@selector(actualizaGiroscopio) userInfo:nil repeats:YES];

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Implementación (2)• Obtener los valores del giroscopio y realizar las acciones que

queramos:

23

-(void)actualizaGiroscopio { // Ratio de rotación en el eje z float rate = self.motionManager.gyroData.rotationRate.z; if (fabs(rate) > .2) { // comprobamos si es un valor significativo (>0.2) // Dirección de la rotación float direction = rate > 0 ? 1 : -1; // La rotación lo sumamos al valor actual _rotation += direction * M_PI/90.0; // Rotamos la imagen self.imagen.transform = CGAffineTransformMakeRotation(_rotation); }}

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Ejemplos de uso• Video demostración: http://www.youtube.com/watch?v=veN-

WHhtcjs

24

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Brújula• Brújula• Implementación

25

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Brújula• Permite obtener los grados respecto al norte

magnético y al norte verdadero (geográfico):• 0 = el dispositivo apunta al norte magnético.• 90 = el dispositivo apunta al este.• 180 = el dispositivo apunta al sur.• 270 = el dispositivo apunta al oeste.

• Disponible a partir del iPhone 3GS.

• Muy útil para aplicaciones que usen mapas y aplicaciones de realidad aumentada.

26

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Implementación (1)• Framework CoreLocation.framework

• Clase CLLocationManager:• Gestiona las actualizaciones de los valores de la brújula.

• Clase CLLocationDirection:• Obtiene los valores en grados de la brújula.

• Implementar el protocolo CLLocationManagerDelegate

• Iniciar las actualizaciones de la brújula:

27

[_locationManager startUpdatingLocation];

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Implementación (2)• Implementar el método del protocolo CLLocationManager:

• Video demostración: http://www.youtube.com/watch?v=78eIB-s28_A

28

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading { // Comprobación de la precisión del sensor if (newHeading.headingAccuracy < 0) return;

float gradosNorteMagnetico = newHeading.magneticHeading;float gradosNorteVerdadero = newHeading.trueHeading;

}

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

GPS• GPS• Implementación

29

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

GPS• Nos proporciona datos de posicionamiento:• Latitud• Longitud• Altitud• Velocidad

• Si el GPS no está disponible se accede por triangulación de antenas WiFi -> menor exactitud.

• Disponible a partir del iPhone 3GS.• Uso principalmente en aplicaciones de mapas, de realidad

aumentada y de navegación.

30

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Implementación (1)• Implementación muy similar a la brújula.• Framework: CoreLocation.framework• Clase CLLocationManager:• Gestiona las actualizaciones de los valores del GPS.

• Implementar el protocolo CLLocationManagerDelegate

• Iniciar las actualizaciones del GPS:

31

[_locationManager startUpdatingLocation];

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Implementación (2)• Implementar los métodos del protocolo CLLocationManager:

32

// Métodos del protocolo CLLocationManagerDelegate

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {

NSLog([newLocation descripcion]);

}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog([error descripcion]);

}

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Implementación (3)

33

// Atributos de CLLocation:

// Velocidad [location speed]];

// Latitud location.coordinate.latitude;

// Longitudlocation.coordinate.longitude;

// Altitud [location altitude];

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Proximidad y sensor de luz ambiente• Proximidad y sensor de luz ambiente• Implementación

34

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Proximidad y sensor de luz ambiente• Sensor de proximidad = sensor de luz ambiente.• Nos proporciona un valor booleano (sí/no) que indica si un

objeto está próximo al dispositivo.• No obtenemos un valor variable -> poca utilidad en

aplicaciones.• Usado en el iPhone para oscurecer la pantalla cuando usamos

el teléfono.• API liberada en el 2009 para su uso libre por los

desarrolladores.

35

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Ejemplo de uso• Uso en la aplicación de Google:• Activar automáticamente la búsqueda por voz al acercar el iPhone

al oído.

36

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Implementación (1)• Métodos del singleton UIDevice.

• Activar el sensor:

• Comprobar si el dispositivo soporta el sensor:

37

[device setProximityMonitoringEnabled:YES];

UIDevice *device = [UIDevice currentDevice];

BOOL sensorActivo = [device isProximityMonitoringEnabled];

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

Implementación (2)• Crear notificación para obtener los cambios del sensor de

proximidad:• Notificación: UIDeviceProximityStateDidChangeNotification

38

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximityChanged:) name:UIDeviceProximityStateDidChangeNotification object:device];

- (void) proximityChanged:(NSNotification *)notification { UIDevice *device = [notification object]; NSLog(@"Cambio en el valor de proximidad: %i", device.proximityState);}

Vídeo de funcionamiento:http://www.youtube.com/watch?v=lQ1M8GrVV_g

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-13 Depto. Ciencia de la Computación e IA Sensores en iOS

• ¿Preguntas?

39

top related