Men的博客

欢迎光临!

0%

加速计

● 加速计的作用
● 用于检测设备的运动(比如摇晃)
● 加速计的经典应用场景 ● 摇一摇
● 计步器
加速计的原理
● 检测设备在X、Y、Z轴上的加速度 (哪个方向有力的作用,哪个方向运动了) ● 根据加速度数值,就可以判断出在各个方向上的作用力度
加速计程序的开发
● 加速计程序的开发
● 在iOS4以前:使用UIAccelerometer,用法非常简单(到了iOS5就已经过
期)
● 从iOS4开始:CoreMotion.framework
● 虽然UIAccelerometer已经过期,但由于其用法极其简单,很多程序里面都 还有残留
UIAccelerometer的使用步骤
● 获得单例对象
UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];
● 设置代理 accelerometer.delegate = self;
● 设置采样间隔
accelerometer.updateInterval = 1.0/30.0; // 1秒钟采样30次
● 实现代理方法

  • (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:
    (UIAcceleration *)acceleration
    // acceleration中的x、y、z三个属性分别代表每个轴上的加速度
    Core Motion
    ● 在iOS4之前,加速度计由UIAccelerometer类来负责采集数据
    ● 随着iPhone4的推出
    ● 加速度计全面升级,并引入了陀螺仪
    ● 与Motion(运动)相关的编程成为重头戏
    ● 苹果特地在iOS4中增加了专门处理Motion的框架-CoreMotion.framework
    ● Core Motion不仅能够提供实时的加速度值和旋转速度值,更重要的是,苹果 在其中集成了很多牛逼的算法
    Core Motion获取数据的两种方式
    ● push
    ● 实时采集所有数据(采集频率高)
    ● pull
    ● 在有需要的时候,再主动去采集数据
    Core Motion的使用步骤(push)
    ● 创建运动管理者对象
    CMMotionManager *mgr = [[CMMotionManager alloc] init];
    ● 判断加速计是否可用(最好判断)
    if (mgr.isAccelerometerAvailable) {
    // 加速计可用 }
    ● 设置采样间隔
    mgr.accelerometerUpdateInterval = 1.0/30.0; // 1秒钟采样30次
    ● 开始采样(采样到数据就会调用handler,handler会在queue中执行)
  • (void)startAccelerometerUpdatesToQueue:(NSOperationQueue *)queue
    withHandler:(CMAccelerometerHandler)handler;
    Core Motion的使用步骤(pull)
    ● 创建运动管理者对象
    CMMotionManager *mgr = [[CMMotionManager alloc] init];
    ● 判断加速计是否可用(最好判断)
    if (mgr.isAccelerometerAvailable) { // 加速计可用 }
    ● 开始采样
  • (void)startAccelerometerUpdates;
    ● 在需要的时候采集加速度数据
    CMAcceleration acc = mgr.accelerometerData.acceleration; NSLog(@”%f, %f, %f”, acc.x, acc.y, acc.z);
    Core Motion框架结构示意图
    摇一摇
    ● 监控摇一摇的方法
    ● 方法1:通过分析加速计数据来判断是否进行了摇一摇操作(比较复杂) ● 方法2:iOS自带的Shake监控API(非常简单)
    ● 判断摇一摇的步骤:实现3个摇一摇监听方法
    ● - (void)motionBegan:(UIEventSubtype)motion withEvent:
    (UIEvent )event /* 检测到摇动 /
    ● - (void)motionCancelled:(UIEventSubtype)motion
    withEvent:(UIEvent )event /
    摇动取消(被中断) /
    ● - (void)motionEnded:(UIEventSubtype)motion withEvent:
    (UIEvent )event /
    摇动结束 */
    更多的设备信息
    ● 如果想获得更多的设备信息,比如
    ● 设备型号、CPU情况、内存使用情况、硬盘使用情况
    ● 是否越狱、装了哪些传感器、当前运行的进程
    ● … …
    ● 有2种方法获取更多的设备信息
    ● 导入底层的C语言库,通过底层的C语言函数获取(较复杂,需要很多时间去
    研究)
    ● 使用第三方库(用OC封装了底层的C函数)
    https://github.com/Shmoopi/iOS-System-Services
    https://github.com/erica/uidevice-extension