zoukankan      html  css  js  c++  java
  • (九十二)加速计的使用方法(过期方法+新方法)

    在iOS4之前。使用UIAccelermeter获取加速计的数据,这样的方法因为简单,沿用至今。

    加速计坐标系如图所看到的。在对应轴向受力时会有数据变化。

    【过期方法】

    ①定义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);
        
    }


  • 相关阅读:
    JDBC 查询的三大参数 setFetchSize prepareStatement(String sql, int resultSetType, int resultSetConcur)
    有空必看
    SpringMVC 利用AbstractRoutingDataSource实现动态数据源切换
    FusionCharts JavaScript API Column 3D Chart
    FusionCharts JavaScript API
    FusionCharts JavaScript API
    Extjs 继承Ext.Component自定义组件
    eclipse 彻底修改复制后的项目名称
    spring 转换器和格式化
    Eclipse快速生成一个JavaBean类的方法
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6977963.html
Copyright © 2011-2022 走看看