天天看點

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

繼續閱讀