天天看点

iOS中 陀螺仪/加速器 韩俊强的博客

版权声明:本文为博主原创文章,未经博主允许不得转载。

引进框架:

#import <coremotion/coremotion.h>

定义属性初始化相关:

#import "viewcontroller.h"  

#import <coremotion/coremotion.h>  

@interface viewcontroller ()  

@property (nonatomic, strong) cmmotionmanager *motionmanager;  

@property (nonatomic, strong) nsoperationqueue *quene;  

@end  

@implementation viewcontroller  

- (void)viewdidload {  

    [super viewdidload];  

   // 初始化 cmmotionmanager  

    self.motionmanager = [[cmmotionmanager alloc]init];  

    // 初始化 nsoperationqueue  

    self.quene = [[nsoperationqueue alloc]init];  

    // 调用加速器  

    [self configureaccelerometer];  

    // 调用陀螺仪  

    [self configuregrro];  

}  

加速器的使用:

/* 

// 每一个设备晃动的时候, 系统通知每一个在用的设备, 可以使本身成为第一响应者 

- (bool)canbecomefirstresponder 

    return yes; 

- (void)viewdidappear:(bool)animated 

    [self becomefirstresponder]; 

 */  

// 加速器的方法  

- (void)configureaccelerometer  

{  

    /** 

     * 5.0之前使用的是pull方式,之后使用push方式 

     * 

    // pull 方式 

    // 判断加速器是否可以使用 

    if ([_motionmanager isaccelerometeravailable]) { 

        [_motionmanager setaccelerometerupdateinterval:1 / 40.0]; 

        [_motionmanager startaccelerometerupdates]; 

    }else{ 

        nslog(@"加速器不能使用"); 

    } 

    */  

    // push 方式  

    if ([_motionmanager isaccelerometeravailable]) {  

        // 设置加速器的频率  

        [_motionmanager setaccelerometerupdateinterval:1 / 40.0];  

        // 开始采集数据  

        [_motionmanager startaccelerometerupdatestoqueue:_quene withhandler:^(cmaccelerometerdata *accelerometerdata, nserror *error) {  

            if (fabs(accelerometerdata.acceleration.x) > 2.0 || fabs(accelerometerdata.acceleration.y) > 2.0 || fabs(accelerometerdata.acceleration.z) > 2.0) {  

                nslog(@"检测到震动");  

            }  

            nslog(@"%.2f__%.2f__%.2f",accelerometerdata.acceleration.x,accelerometerdata.acceleration.y,accelerometerdata.acceleration.z);  

        }];  

    }else{  

        nslog(@"加速器不能使用");  

    }  

// 触摸结束的时候  

- (void)touchesended:(nsset *)touches withevent:(uievent *)event  

    cmacceleration acceleration = _motionmanager.accelerometerdata.acceleration;  

    nslog(@"%.2f__%.2f__%.2f",acceleration.x,acceleration.y,acceleration.z);  

陀螺仪的使用:

// 陀螺仪的使用  

- (void)configuregrro  

    if ([_motionmanager isgyroavailable]) {  

        [self.motionmanager startgyroupdatestoqueue:_quene withhandler:^(cmgyrodata *gyrodata, nserror *error) {  

            nslog(@"%.2f__%.2f__%.2f",gyrodata.rotationrate.x,gyrodata.rotationrate.y,gyrodata.rotationrate.z);  

        nslog(@"陀螺仪不能使用");  

晃动触发的一些方法:

- (void)viewdiddisappear:(bool)animated  

    [self.motionmanager stopaccelerometerupdates];  

    [self.motionmanager stopgyroupdates];  

// 开始晃动的时候触发  

- (void)motionbegan:(uieventsubtype)motion withevent:(uievent *)event  

    nslog(@"开始晃动");  

// 结束晃动的时候触发  

- (void)motionended:(uieventsubtype)motion withevent:(uievent *)event  

    nslog(@"晃动结束");  

// 中断晃动的时候触发  

- (void)motioncancelled:(uieventsubtype)motion withevent:(uievent *)event  

    nslog(@"取消晃动,晃动终止");  

原文地址:http://blog.csdn.net/qq_31810357/article/details/50124911

继续阅读