2011-03-06 7 views
21

Necesito detectar cuando el giroscopio/acelerómetro se activa una cierta cantidad. Básicamente para detectar cuando hay movimiento del dispositivo. No sé nada sobre Core Motion.Detección de movimiento de iPhone simple

Tal vez alguien me puede dirigir a un tutorial de iniciadores o algo así.

Gracias de antemano.

Respuesta

34

Creo que tienes que usar Core Motion. La buena noticia es que no es tan difícil de usar para su dominio problemático. Comience a leer el Event Handling Guide especialmente la sección Manejo del dispositivo procesado: datos de movimiento. Si está interesado en saber que se realizó un movimiento leve, como indicó, puede omitir el manejo de la rotación y el procesamiento de la señal estrecha en CMDeviceMotion.userAcceleration. Esto se debe a que cada rotación da como resultado señales de acelerómetro también.

Crear una CMDeviceMotionHandler como se describe en startDeviceMotionUpdatesToQueue:withHandler: Su CMDeviceMotionHandler debe hacer algo como:

float accelerationThreshold = 0.2; // or whatever is appropriate - play around with different values 
CMAcceleration userAcceleration = deviceMotion.userAcceleration; 
if (fabs(userAcceleration.x) > accelerationThreshold) 
    || fabs(userAcceleration.y) > accelerationThreshold 
    || fabs(userAcceleration.z) > accelerationThreshold) { 
    // enter code here 
} 

Básicamente eso es todo. Tenga en cuenta que cada aceleración tendrá una contraparte. Eso significa que, si aplica una fuerza para mover (es decir, acelerar) el dispositivo hacia la derecha, habrá una contrapartida para la desaceleración para detener el movimiento y dejar que el dispositivo descanse en la nueva posición. Por lo tanto, su condición if se cumplirá dos veces para cada movimiento.

+0

¡El enlace que brindó es excelente! A pesar de que he estado buscando lecturas de movimiento y leí todas las referencias de clase relevantes, no pude encontrar un resumen así, ¡gracias! –

+0

Gracias por explicar de una manera simple y fácil de entender :) – Luqman

+1

Este enlace está muerto "Manejo de dispositivos procesados-Datos de movimiento" ¿Puede actualizar el enlace? – bpolat

2

En viewDidAppear, convertido en el primer nivel de respuesta:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self becomeFirstResponder]; 
} 

Y asegúrese de que puede ser el primero en responder:

- (BOOL)canBecomeFirstResponder { 
    return YES; 
} 

A continuación, se puede poner en práctica la detección de movimiento.

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 
{ 
    if (event.subtype == UIEventTypeMotion){ 
     //there was motion 
    } 
} 
Cuestiones relacionadas