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.
¡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! –
Gracias por explicar de una manera simple y fácil de entender :) – Luqman
Este enlace está muerto "Manejo de dispositivos procesados-Datos de movimiento" ¿Puede actualizar el enlace? – bpolat