CoreMotion(CM)跟运动相关的都保存在这个框架中,使用时需要引入 #import <CoreMotion/CoreMotion.h>头文件
CoreMotion的框架结构:CoreMotionManager、CMAccelerometerData、CMDeviceMotion、CMGyroData.
Push:实时采集所有数据(采集频率高),UIAccelerometer方式是push方式
Pull:在有需要的时候,再主动去采集数据
Push使用步骤:
1.创建运动管理者对象
2.判断加速计是否可用(最好判断)
3.设置采样间隔
4.开始采样(采样到数据就会调用handler,handler会在queue中执行)
// 1.创建运动管理者对象
self.mgr=
[[CMMotionManageralloc]init];
// 2.判断加速计是否可用(最好判断)
if (self.mgr.isAccelerometerAvailable) {
// 3.设置采样间隔
self.mgr.accelerometerUpdateInterval= 1 / 30.0;
// 4.开始采样方式一:Push(采集加速度数据)
// (采样到数据就会调用handler,handler会在queue中执行)
[self.mgrstartAccelerometerUpdatesToQueue:[NSOperationQueuemainQueue]withHandler:^(CMAccelerometerData* _Nullable accelerometerData, NSError * _Nullable error) {
NSLog(@"%f,%f,%f",accelerometerData.acceleration.x,accelerometerData.acceleration.y,accelerometerData.acceleration.z);
// 如果在Block中要执行较耗时的操作,queue最好不是主队列,会阻塞主线程
// 如果在block中要刷新UI界面,queue最好是主队列
}];
}else{
NSLog(@"加速计不可用");
// 2.判断加速计是否可用(最好判断)
if (self.mgr.isAccelerometerAvailable) {
// 3.设置采样间隔
self.mgr.accelerometerUpdateInterval= 1 / 30.0;
// 4.开始采样方式一:Push(采集加速度数据)
// (采样到数据就会调用handler,handler会在queue中执行)
[self.mgrstartAccelerometerUpdatesToQueue:[NSOperationQueuemainQueue]withHandler:^(CMAccelerometerData* _Nullable accelerometerData, NSError * _Nullable error) {
NSLog(@"%f,%f,%f",accelerometerData.acceleration.x,accelerometerData.acceleration.y,accelerometerData.acceleration.z);
// 如果在Block中要执行较耗时的操作,queue最好不是主队列,会阻塞主线程
// 如果在block中要刷新UI界面,queue最好是主队列
}];
}else{
NSLog(@"加速计不可用");
}
Pull使用步骤:
1.创建运动管理者对象
2.判断加速计是否可用(最好判断)
3.开始采样
//
使用步骤:
// 1.创建运动管理者对象
self.mgr= [[CMMotionManageralloc]init];
// 2.判断加速计是否可用(最好判断)
// 1.创建运动管理者对象
self.mgr= [[CMMotionManageralloc]init];
// 2.判断加速计是否可用(最好判断)
if
(self.mgr.isAccelerometerAvailable)
{
// 3.开始采样Pull
[selfpull];
}else{
NSLog(@"加速计不可用");
}
}else{
NSLog(@"加速计不可用");
}
// pull:在有需要的时候,再主动去采集数据
- (void)pull {
[self.mgrstartAccelerometerUpdates];
}
[self.mgrstartAccelerometerUpdates];
}
- (void)touchesBegan:(NSSet<UITouch*>
*)touches withEvent:(UIEvent*)event {
CMAccelerationacceleration = self.mgr.accelerometerData.acceleration;
NSLog(@"%f,%f,%f",acceleration.x,acceleration.y,acceleration.z);
CMAccelerationacceleration = self.mgr.accelerometerData.acceleration;
NSLog(@"%f,%f,%f",acceleration.x,acceleration.y,acceleration.z);
}