版权声明:本文为博主原创文章,未经博主允许不得转载。
引进框架:
#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