(九十二)加速计的用法(过期方法+新方法)
2015-07-27 22:17
441 查看
在iOS4之前,使用UIAccelermeter获取加速计的数据,这种方法由于简单,沿用至今。
加速计坐标系如图所示,在相应轴向受力时会有数据变化。
【过期方法】
①定义UIAccelerometer对象,设置代理,采样间隔,然后系统会自动调用代理方法。
③然后调用代理方法:acceleration对象的x、y、z就是三轴数据。
【新方法】
新的方法在CoreMotion框架中。
新方法支持两种数据获取方式,push和pull,push指的是持续获取数据,pull指的是需要时主动获取数据。
1.Push方法:
创建对象、保存对象(防止对象释放无法继续执行)、设置采样间隔,然后调用相应方法,通过block回调。
2.Pull方法:
①调用startAccelerometerUpdates方法,然后就可以通过manager的accelerometerData对象得到数据。
②手动获取,例如触摸输入时获取数据。
加速计坐标系如图所示,在相应轴向受力时会有数据变化。
【过期方法】
①定义UIAccelerometer对象,设置代理,采样间隔,然后系统会自动调用代理方法。
UIAccelerometer *ac = [UIAccelerometer sharedAccelerometer]; ac.delegate = self; ac.updateInterval = 1 / 30.0;②然后遵循协议UIAccelerometerDelegate。
③然后调用代理方法:acceleration对象的x、y、z就是三轴数据。
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{ NSLog(@"%f %f %f",acceleration.x,acceleration.y,acceleration.z); }
【新方法】
新的方法在CoreMotion框架中。
新方法支持两种数据获取方式,push和pull,push指的是持续获取数据,pull指的是需要时主动获取数据。
1.Push方法:
创建对象、保存对象(防止对象释放无法继续执行)、设置采样间隔,然后调用相应方法,通过block回调。
// 创建manager,判断加速计是否可用,设置采样时间,开始采样。 CMMotionManager *manager = [[CMMotionManager alloc] init]; _manager = manager; if(!manager.isAccelerometerAvailable){ NSLog(@"加速计不可用"); return; } manager.accelerometerUpdateInterval = 1 / 30.0; // push方式 [manager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) { // 采集到数据时调用 if(error) NSLog(@"%@",error); NSLog(@"%lf %lf %lf",accelerometerData.acceleration.x,accelerometerData.acceleration.y,accelerometerData.acceleration.z); }];
2.Pull方法:
①调用startAccelerometerUpdates方法,然后就可以通过manager的accelerometerData对象得到数据。
// 创建manager,判断加速计是否可用,设置采样时间,开始采样。 CMMotionManager *manager = [[CMMotionManager alloc] init]; _manager = manager; if(!manager.isAccelerometerAvailable){ NSLog(@"加速计不可用"); return; } manager.accelerometerUpdateInterval = 1 / 30.0; // push方式,实时采集;pull方式,需要时主动获取。 [manager startAccelerometerUpdates]; // pull 方式
②手动获取,例如触摸输入时获取数据。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ CMAcceleration acceleration = _manager.accelerometerData.acceleration; NSLog(@"%lf %lf %lf",acceleration.x,acceleration.y,acceleration.z); }
相关文章推荐
- UIWindow
- 动态代理实现横切——封装事务
- (九十二)加速计的用法(过期方法+新方法)
- [转]如何用Vmware 10虚拟化物理机
- 总结:Different Methods for Weight Initialization in Deep Learning
- 小白学开发(iOS)OC_description(2015-07-26)
- Linux下文件共享设置
- 小白学开发(iOS)OC_继承(2015-07-26)
- caffe 安装和使用问题列表
- 做文件管理器时isDirectory()判断错误原因及解决办法
- 二叉树非递归先序遍历
- 利用VBoxManage对虚拟机格式vdi、vmdk、vhd进行互转
- 程序员历练之路
- 在线生产系统执行 alter table add column type default x ;的分析
- (1) Karthik Ganesan的方法 - spec2006中精确的simulation points执行点
- C++常用术语及其英文翻译的含义和简单用途总结(五)
- C51 队列 方式 中断接收 查询发送
- 数据结构链表之循环双链表
- load ruuner几点事项
- Hadoop概论