2012-04-16 13 views

risposta

13

È necessario utilizzare lo Core Motion framework (introdotto in iOS 4.0) come sostituto. Creare un'istanza di CMMotionManager e dirla a startAccelerometerUpdatesToQueue:withHandler:, passandole a NSOperationQueue e un blocco che verrà eseguito sulla coda specificata ogni volta che sono disponibili nuovi dati dell'accelerometro.

4

Ecco un codice di esempio utile che ho trovato per CoreMotion dal collegamento 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

Aggiungi CoreMotion framework al progetto. Quindi:

#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); 
     }]; 
    } 
} 
Problemi correlati