2011-08-21 9 views
13

Uczę się pisać aplikację za pomocą czujnika żyroskopu w iOS. Czy istnieją klasy do radzenia sobie z żyroskopem podobne do UIAcceleration/UIAccelerometer/UIAccelerometerDelegate dla akcelerometru?iOS Żyroskop API

Odpowiedz

31

Pierwszy import CoreMotion ramy

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

Jako kod mówi, najpierw utworzyć instancję kierownika ruchu. Wtedy widzę, czy urządzenie obsługuje żyroskop. Jeśli nie zginie z wdziękiem, w przeciwnym razie ustaw interwał aktualizacji żyroskopu &, a następnie zarejestruj się, aby uzyskać aktualizacje z żyroskopu. Dzięki tym aktualizacjom musisz zdefiniować niestandardową logikę tego, co chcesz zrobić z wartościami. To jest to, że jesteś dobry, aby przejść ...

+2

[self.motionManager isGyroAvailable] czy to czek musi? Co się dzieje, gdy żyroskop jest niedostępny? Czy aplikacja się zawiesi? Lub zwróć wartości puste. Jeśli zwraca wartości null, to który obiekt zwróci wartość zerową? – user682765

+2

to sprawdzian, ponieważ starsze iPhony nie mają żyroskopu. Może się zawiesić, jeśli zaczniesz używać interfejsu gyro API, gdy samo urządzenie nie obsługuje. lepiej być bezpiecznym niż żałować ... –

+0

Jako aktualizacja: Dokumentacja Apple dla 'startGyroUpdatesToQueue' zaleca, aby nie używać głównej kolejki, ponieważ może to spowodować opóźnienie. Użyj innej kolejki lub po prostu użyj właściwości '.gyroData' menedżera ruchu, aby uzyskać dane żyroskopu. Jeśli tworzysz grę za pomocą szkieletów ruchu, zaleciłbym wykonanie 1/60 sekundy (aby dopasować liczbę klatek na sekundę), a jeśli któryś z nich ma problem, zmień przerwę na pobieranie danych żyroskopowych . – DDPWNAGE

Powiązane problemy