版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。
引進架構:
#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