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
= [[
CMMotionManager
alloc
]
init
];
// 2. 判断加速计是否可用(最好判断)
if ( self . mgr . isAccelerometerAvailable ) {
// 3. 设置采样间隔
self . mgr . accelerometerUpdateInterval = 1 / 30.0 ;
// 4. 开始采样方式一: Push( 采集加速度数据 )
// (采样到数据就会调用 handler , handler 会在 queue 中执行)
[ self . mgr startAccelerometerUpdatesToQueue :[ NSOperationQueue mainQueue ] 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 . mgr startAccelerometerUpdatesToQueue :[ NSOperationQueue mainQueue ] 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 = [[ CMMotionManager alloc ] init ];
// 2. 判断加速计是否可用(最好判断)
// 1. 创建运动管理者对象
self . mgr = [[ CMMotionManager alloc ] init ];
// 2. 判断加速计是否可用(最好判断)
if (self.mgr.isAccelerometerAvailable) {
// 3.开始采样Pull
[
self
pull
];
} else {
NSLog ( @" 加速计不可用 " );
}
} else {
NSLog ( @" 加速计不可用 " );
}
// pull:在有需要的时候,再主动去采集数据
- (
void
)pull {
[ self . mgr startAccelerometerUpdates ];
}
[ self . mgr startAccelerometerUpdates ];
}
- (
void
)touchesBegan:(
NSSet
<
UITouch
*> *)touches withEvent:(
UIEvent
*)event {
CMAcceleration acceleration = self . mgr . accelerometerData . acceleration ;
NSLog ( @"%f,%f,%f" ,acceleration. x ,acceleration. y ,acceleration. z );
CMAcceleration acceleration = self . mgr . accelerometerData . acceleration ;
NSLog ( @"%f,%f,%f" ,acceleration. x ,acceleration. y ,acceleration. z );
}