iOS加速计(陀螺仪)的使用

加速计的作用:用于检测设备的运动,比如摇晃等动作。加速计运用的于摇一摇、计步器以及各类游戏中使用。
加速计的原理就是检测设备在X、Y、Z轴上的加速度,判断在哪个方向有力的作用。
在iOS中加速计的开发有两种方式:
在iOS4之前使用的是UIAccelerometer类,用法简单,iOS5时就已经过期,但由于UIAccelerometer用法及其简单,很多程序里面种都还有残留。

使用UIAccelerometer分为4步:

// 1.获得单例对象
    UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];

    // 2.设置代理
    accelerometer.delegate = self;

    // 3.设置采样间隔(每隔多少秒采样一次数据)
    accelerometer.updateInterval = 1 / 30.0;

    //4.实现代理方法
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
// acceleration中的x、y、z三个属性分别代表每个轴上的加速度

随着iPhone4的推出
加速度计全面升级,并引入了陀螺仪,与Motion(运动)相关的编程成为重头戏,苹果特地在iOS4中增加了专门处理Motion的框架-CoreMotion.framework,Core Motion不仅能够提供实时的加速度值和旋转速度值,更重要的是,苹果在其中集成了很多奇妙的算法。

Core Motion获取加速度的值有两种方式:1、push:实时的采集所有数据(采集频率高,有耗电大的缺点)2、pull:有需要的时候再去主动的采集数据

Core Motion用法:

// 1.创建motion管理者
    self.mgr = [[CMMotionManager alloc] init];

    // 2.判断加速计是否可用
    if (self.mgr.isAccelerometerAvailable) {
        [self pull];
    } else {
        NSLog(@"---加速计不可用-----");
    }

/**
 * ******* pull *******
 */
- (void)pull
{
    [self.mgr startAccelerometerUpdates];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    CMAcceleration acceleration = self.mgr.accelerometerData.acceleration;
    NSLog(@"%f %f %f", acceleration.x, acceleration.y, acceleration.z);
}

/**
 * ******* push *******
 */
- (void)push
{
    // 3.设置采样间隔
    self.mgr.accelerometerUpdateInterval = 1 / 30.0;

    // 4.开始采样(采集加速度数据)
    [self.mgr startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
        // 如果在block中执行较好时的操作,queue最好不是主队列
        // 如果在block中要刷新UI界面,queue最好是主队列
        NSLog(@"%f %f %f", accelerometerData.acceleration.x, accelerometerData.acceleration.y, accelerometerData.acceleration.z);
    }];
}

摇一摇功能:
方法1:通过分析加速计数据来判断是否进行了摇一摇操作(比较复杂)
方法2:iOS自带的Shake监控API(非常简单)

判断摇一摇的步骤:实现3个摇一摇监听方法,这三个方法是由UIResponder提供的,由于控制器本省就继承自该类,所以控制器就有这几个方法:

pragma mark - 实现相应的响应者方法
/** 开始摇一摇 */
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    NSLog(@"motionBegan");
}

/** 摇一摇结束(需要在这里处理结束后的代码) */
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    // 不是摇一摇运动事件
    if (motion != UIEventSubtypeMotionShake) return;

    NSLog(@"motionEnded");
}

/** 摇一摇取消(被中断,比如突然来电) */
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    NSLog(@"motionCancelled");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值