2011-08-21 9 views
13

Estoy aprendiendo a escribir una aplicación usando el sensor de giroscopio en iOS. ¿Hay clases para tratar con el giroscopio similar a UIAcceleration/UIAccelerometer/UIAccelerometerDelegate para el acelerómetro?iOS Giroscopio API

Respuesta

31

Primera importación CoreMotion marco

#import <CoreMotion/CoreMotion.h> 

    self.motionManager = [[CMMotionManager alloc] init]; 


    //Gyroscope 
    if([self.motionManager isGyroAvailable]) 
    { 
     /* Start the gyroscope if it is not active already */ 
     if([self.motionManager isGyroActive] == NO) 
     { 
      /* Update us 2 times a second */ 
      [self.motionManager setGyroUpdateInterval:1.0f/2.0f]; 

      /* Add on a handler block object */ 

      /* Receive the gyroscope data on this block */ 
      [self.motionManager startGyroUpdatesToQueue:[NSOperationQueue mainQueue] 
      withHandler:^(CMGyroData *gyroData, NSError *error) 
      { 
       NSString *x = [[NSString alloc] initWithFormat:@"%.02f",gyroData.rotationRate.x]; 
       self.gyro_xaxis.text = x; 

       NSString *y = [[NSString alloc] initWithFormat:@"%.02f",gyroData.rotationRate.y]; 
       self.gyro_yaxis.text = y; 

       NSString *z = [[NSString alloc] initWithFormat:@"%.02f",gyroData.rotationRate.z]; 
       self.gyro_zaxis.text = z; 
      }]; 
     } 
    } 
    else 
    { 
     NSLog(@"Gyroscope not Available!"); 
    } 

Como dice el código, primero se crea una instancia del gestor de movimiento. Luego veo si el dispositivo es compatible con giroscopio. Si no muere con gracia, establezca el intervalo de actualización del giroscopio & y luego regístrese para obtener actualizaciones del giroscopio. Con estas actualizaciones, debe definir su lógica personalizada de lo que quiere hacer con los valores. Eso es lo que está bien para ir ...

+2

[self.motionManager isGyroDisponible] ¿Es este control una necesidad? ¿Qué sucede si el giroscopio no está disponible? ¿Se cuelga la aplicación? O devuelve valores nulos. Si devuelve valores nulos, ¿cuál es el objeto que devolvería un valor nulo? – user682765

+2

es un control ya que los iPhones más antiguos no tienen giroscopio. Podría colapsar si comienzas a usar la API de giro cuando el dispositivo no es compatible. es mejor prevenir que lamentar ... –

+0

Como una actualización: la documentación de Apple para el 'startGyroUpdatesToQueue' recomienda no utilizar la cola principal, ya que puede causar retraso. Utilice una cola diferente o simplemente use la propiedad '.gyroData' del gestor de movimiento para obtener datos de giroscopio. Si estás haciendo un juego usando los marcos de movimiento, te recomiendo hacer el intervalo 1/60 de segundo (para que coincida con las velocidades de cuadro), y si alguno de los dos tiene un problema, cambia el intervalo para bajar los datos del giro . – DDPWNAGE

Cuestiones relacionadas