2012-04-16 10 views

Odpowiedz

13

Powinieneś użyć Core Motion framework (wprowadzonego w iOS 4.0) jako substytutu. Utwórz instancję CMMotionManager i przekaż ją startAccelerometerUpdatesToQueue:withHandler:, przekazując ją NSOperationQueue i blok, który zostanie wykonany w określonej kolejce, gdy tylko nowe dane akcelerometru będą dostępne.

4

Oto przydatny kod przykładowy znaleziony dla CoreMotion z linku this.

@interface ViewController() 

    @property (nonatomic, strong) CMMotionManager *motionManager; 
    @property (nonatomic, strong) IBOutlet UILabel *xAxis; 
    @property (nonatomic, strong) IBOutlet UILabel *yAxis; 
    @property (nonatomic, strong) IBOutlet UILabel *zAxis; 

    @end 

    @implementation ViewController 
    - (void)viewDidLoad 
    { 
     [super viewDidLoad]; 

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

     if ([self.motionManager isAccelerometerAvailable]) 
     { 
     NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 
     [self.motionManager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       self.xAxis.text = [NSString stringWithFormat:@"%.2f",accelerometerData.acceleration.x]; 
       self.yAxis.text = [NSString stringWithFormat:@"%.2f",accelerometerData.acceleration.y]; 
       self.zAxis.text = [NSString stringWithFormat:@"%.2f",accelerometerData.acceleration.z]; 
      }); 
      }]; 
     } else 
     NSLog(@"not active"); 
    } 
@end 
1

Najpierw dodaj framework CoreMotion do projektu. Następnie:

#import <CoreMotion/CoreMotion.h> 

@property (strong, nonatomic) CMMotionManager *motionManager; 

- (void)viewDidLoad { 
    _motionManager = [CMMotionManager new]; 
    _motionManager.accelerometerUpdateInterval = 0.01;  // 0.01 = 1s/100 = 100Hz 
    if ([_motionManager isAccelerometerAvailable]) 
    { 
     NSOperationQueue *queue = [NSOperationQueue new]; 
     [_motionManager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error){ 
      NSLog(@"X = %0.4f, Y = %.04f, Z = %.04f", 
        accelerometerData.acceleration.x, 
        accelerometerData.acceleration.y, 
        accelerometerData.acceleration.z); 
     }]; 
    } 
}