如何获得IOS中的加速度计数据?

我正在使用UIAccelerotmeterDelegate方法accelerometer:didAccelerate:但最近该方法已被弃用在iOS 5.0中。 那么获取加速度计数据的另一种方法是什么呢? 文件没有提到我们应该使用的替代scheme。

您应该使用Core Motion框架 (在iOS 4.0中引入)作为替代。 创build一个CMMotionManager的实例,并告诉它startAccelerometerUpdatesToQueue:withHandler:传递一个NSOperationQueue和一个块,在新的加速度计数据可用时在指定的队列上执行。

看来UIAccelerometer和UIAccelerometerDelegate被CoreMotion框架所取代。

你可以在这里find答案:

为什么加速度计:didAccelerate:在IOS5中弃用?

我希望它有帮助。

这是一个有用的示例代码,我从这个链接find的CoreMotion。

  @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 

它由CoreMotion取代。 请参阅运动事件 。

首先将CoreMotion框架添加到项目中。 然后:

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