2011-08-21 15 views
13

Sto imparando a scrivere un'app utilizzando il sensore del giroscopio in iOS. Esistono classi per gestire il giroscopio simile a UIAcceleration/UIAccelerometer/UIAccelerometerDelegate per l'accelerometro?API Gyroscope iOS

risposta

31

Prima di importazione CoreMotion quadro

#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!"); 
    } 

Come dice il codice, per prima cosa creare un'istanza di responsabile del movimento. Poi vedo se il dispositivo supporta Giroscopio. Se non muori con grazia, altrimenti imposta l'intervallo di aggiornamento del giroscopio & quindi registrati per ottenere gli aggiornamenti dal giroscopio. Con questi aggiornamenti è necessario definire la logica personalizzata di ciò che si desidera fare con i valori. Questo è tutto ciò che devi fare ...

+2

[self.motionManager isGyroAvailable] questo controllo è un must? Cosa succede se il giroscopio non è disponibile? L'app si blocca? O restituire valori nulli. Se restituisce valori null, qual è l'oggetto che restituisce un valore null ?? – user682765

+2

è un controllo poiché gli iPhone meno recenti non dispongono di giroscopio. Potrebbe bloccarsi se inizi a utilizzare le API del giroscopio quando il dispositivo stesso non supporta. meglio essere sicuri che dispiaciuti ... –

+0

Come aggiornamento: la Documentazione di Apple per 'startGyroUpdatesToQueue' consiglia di non usare la coda principale in quanto ciò potrebbe causare lag. Utilizzare una coda diversa o utilizzare semplicemente la proprietà '.gyroData' del gestore di movimento per ottenere i dati del giroscopio. Se stai facendo un gioco usando le strutture di movimento, ti consiglio di fare l'intervallo di 1/60 di secondo (in modo che corrisponda al frame rate), e se uno dei due ha un problema, cambia l'intervallo per ottenere i dati del giroscopio verso il basso . – DDPWNAGE