您的位置:首页 > 其它

XZ_CoreMotion框架获取数据的两种方式

2016-03-01 21:13 267 查看
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(@"加速计不可用");

    }
Pull使用步骤:

1.创建运动管理者对象

2.判断加速计是否可用(最好判断)
3.开始采样
 //

使用步骤:

   
// 1.创建运动管理者对象

   
self.mgr=
[[CMMotionManageralloc]init];

   
// 2.判断加速计是否可用(最好判断)
   if
(self.mgr.isAccelerometerAvailable)
{
       // 3.开始采样Pull
        [selfpull];

    }else{

       
NSLog(@"加速计不可用");

    }
   // pull:在有需要的时候,再主动去采集数据
- (void)pull {

    [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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: