iphone中加速器,陀螺仪,磁力计的使用和实现
2014-02-17 09:25
267 查看
#import "RootViewController.h"
#import <CoreMotion/CoreMotion.h>//需要在frameworks中引入CoreMotion.framework框架
@interface
RootViewController ()
{
CMMotionManager *motionManager;
UIImageView* imageView;
}
@end
@implementation RootViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super
initWithNibName:nibNameOrNil
bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return
self;
}
- (void)viewDidLoad
{
[super
viewDidLoad];
imageView = [[UIImageView
alloc]initWithImage:[UIImage
imageNamed:@"33.jpeg"]];
imageView.backgroundColor=[UIColor
redColor];
imageView.frame =
CGRectMake(0,
0, 50,
50);
imageView.center =
self.view.center;
[self.view
addSubview:imageView];
//Core Motion的使用就是一三部曲:初始化,获取数据,处理后事。
//可以参考资料:http://www.kunli.info/2010/07/30/motion/
//在初始化阶段,不管你要获取的是什么数据,首先需要做的就是
motionManager = [[CMMotionManager
alloc]
init];
//所有的操作都会由这个manager接管。后面的初始化操作相当直观,以加速度的pull方式为例
[motionManager
startAccelerometerUpdates];
// 开始更新,后台线程开始运行。这是pull方式。
if (!motionManager.accelerometerAvailable ) {
// fail code //
检查传感器到底在设备上是否可用
NSLog(@"传感器不可用");
}else{
motionManager.accelerometerUpdateInterval =
1/60.0;
// 告诉manager,更新频率
//如果是push方式,更新的代码可以写成这样
[motionManager
startAccelerometerUpdatesToQueue:[NSOperationQueue
currentQueue] withHandler:^(CMAccelerometerData *latestAcc,
NSError *error)
{
NSLog(@"执行block方法");
CMAccelerometerData *data = latestAcc;//motionManager.accelerometerData;
NSNumber *x = [NSNumber
numberWithDouble:data.acceleration.x];
NSNumber *y = [NSNumber
numberWithDouble:data.acceleration.y];
NSNumber *z = [NSNumber
numberWithDouble:data.acceleration.z];
NSLog(@"x=%@------y=%@--------z=%@",x,y,z);
if (data.acceleration.x >
0) {
imageView.center =
CGPointMake(imageView.center.x +
1, imageView.center.y);//向右
}
if(data.acceleration.x <
0){
imageView.center =
CGPointMake(imageView.center.x -
1, imageView.center.y);//向左
}
if (data.acceleration.y >
0){
imageView.center =
CGPointMake(imageView.center.x
, imageView.center.y -
1);//向上
}
if (data.acceleration.y <
0){
imageView.center =
CGPointMake(imageView.center.x ,
imageView.center.y +
1);//向下
}
NSLog(@"*****************************");
}];
}
UIButton *button=[UIButton
buttonWithType:UIButtonTypeRoundedRect];
button.frame=CGRectMake(60,
50, 150,
30);
[button setTitle:@"停止"
forState:UIControlStateNormal];
[button addTarget:self
action:@selector(didstop)
forControlEvents:UIControlEventTouchUpInside];
[self.view
addSubview:button];
UIButton *button1=[UIButton
buttonWithType:UIButtonTypeRoundedRect];
button1.frame=CGRectMake(60,
450, 150,
30);
[button1 setTitle:@"获取"
forState:UIControlStateNormal];
[button1 addTarget:self
action:@selector(didlook)
forControlEvents:UIControlEventTouchUpInside];
[self.view
addSubview:button1];
}
-(void)didlook
{
//要数据
CMAccelerometerData *data =
motionManager.accelerometerData;
NSNumber *x = [NSNumber
numberWithDouble:data.acceleration.x];
NSNumber *y = [NSNumber
numberWithDouble:data.acceleration.y];
NSNumber *z = [NSNumber
numberWithDouble:data.acceleration.z];
NSLog(@"x=%@------y=%@--------z=%@",x,y,z);
}
-(void)didstop
{
//最后是处理后事,就是在你不需要Core Motion进行处理的时候,释放资源
[motionManager
stopAccelerometerUpdates];
}
- (void)didReceiveMemoryWarning
{
[super
didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
#import <CoreMotion/CoreMotion.h>//需要在frameworks中引入CoreMotion.framework框架
@interface
RootViewController ()
{
CMMotionManager *motionManager;
UIImageView* imageView;
}
@end
@implementation RootViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super
initWithNibName:nibNameOrNil
bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return
self;
}
- (void)viewDidLoad
{
[super
viewDidLoad];
imageView = [[UIImageView
alloc]initWithImage:[UIImage
imageNamed:@"33.jpeg"]];
imageView.backgroundColor=[UIColor
redColor];
imageView.frame =
CGRectMake(0,
0, 50,
50);
imageView.center =
self.view.center;
[self.view
addSubview:imageView];
//Core Motion的使用就是一三部曲:初始化,获取数据,处理后事。
//可以参考资料:http://www.kunli.info/2010/07/30/motion/
//在初始化阶段,不管你要获取的是什么数据,首先需要做的就是
motionManager = [[CMMotionManager
alloc]
init];
//所有的操作都会由这个manager接管。后面的初始化操作相当直观,以加速度的pull方式为例
[motionManager
startAccelerometerUpdates];
// 开始更新,后台线程开始运行。这是pull方式。
if (!motionManager.accelerometerAvailable ) {
// fail code //
检查传感器到底在设备上是否可用
NSLog(@"传感器不可用");
}else{
motionManager.accelerometerUpdateInterval =
1/60.0;
// 告诉manager,更新频率
//如果是push方式,更新的代码可以写成这样
[motionManager
startAccelerometerUpdatesToQueue:[NSOperationQueue
currentQueue] withHandler:^(CMAccelerometerData *latestAcc,
NSError *error)
{
NSLog(@"执行block方法");
CMAccelerometerData *data = latestAcc;//motionManager.accelerometerData;
NSNumber *x = [NSNumber
numberWithDouble:data.acceleration.x];
NSNumber *y = [NSNumber
numberWithDouble:data.acceleration.y];
NSNumber *z = [NSNumber
numberWithDouble:data.acceleration.z];
NSLog(@"x=%@------y=%@--------z=%@",x,y,z);
if (data.acceleration.x >
0) {
imageView.center =
CGPointMake(imageView.center.x +
1, imageView.center.y);//向右
}
if(data.acceleration.x <
0){
imageView.center =
CGPointMake(imageView.center.x -
1, imageView.center.y);//向左
}
if (data.acceleration.y >
0){
imageView.center =
CGPointMake(imageView.center.x
, imageView.center.y -
1);//向上
}
if (data.acceleration.y <
0){
imageView.center =
CGPointMake(imageView.center.x ,
imageView.center.y +
1);//向下
}
NSLog(@"*****************************");
}];
}
UIButton *button=[UIButton
buttonWithType:UIButtonTypeRoundedRect];
button.frame=CGRectMake(60,
50, 150,
30);
[button setTitle:@"停止"
forState:UIControlStateNormal];
[button addTarget:self
action:@selector(didstop)
forControlEvents:UIControlEventTouchUpInside];
[self.view
addSubview:button];
UIButton *button1=[UIButton
buttonWithType:UIButtonTypeRoundedRect];
button1.frame=CGRectMake(60,
450, 150,
30);
[button1 setTitle:@"获取"
forState:UIControlStateNormal];
[button1 addTarget:self
action:@selector(didlook)
forControlEvents:UIControlEventTouchUpInside];
[self.view
addSubview:button1];
}
-(void)didlook
{
//要数据
CMAccelerometerData *data =
motionManager.accelerometerData;
NSNumber *x = [NSNumber
numberWithDouble:data.acceleration.x];
NSNumber *y = [NSNumber
numberWithDouble:data.acceleration.y];
NSNumber *z = [NSNumber
numberWithDouble:data.acceleration.z];
NSLog(@"x=%@------y=%@--------z=%@",x,y,z);
}
-(void)didstop
{
//最后是处理后事,就是在你不需要Core Motion进行处理的时候,释放资源
[motionManager
stopAccelerometerUpdates];
}
- (void)didReceiveMemoryWarning
{
[super
didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
相关文章推荐
- c#,使用WPF的Adorner实现iPhone上新邮件或消息提示效果----实现(二)
- iphone--使用NSTimer与iphone的简单动画,实现飘雪效果
- iphone中使用第三方工具(RegexKitLite)实现正则表达式
- iPhone开发之UIScrollView滚动组件的使用(七)利用NSTimer计时器和UIPageControl组件代码实现图片轮播器
- [IPHONE] iOS使用ZbarSDK实现扫描二维码以及条形码功能
- c#,使用WPF的Adorner实现iPhone上新邮件或消息提示效果----实现(二)
- iPhone开发笔记(17)使用EGOTableViewPullRefresh实现列表的下拉刷新功能
- 使用NSTimer实现倒计时,Iphone幻灯片效果+背景音乐,
- Objective-C ,ios,iphone开发基础:picker控件详解与使用,(实现省市的二级联动)
- iphone--使用NSTimer实现倒计时
- Objective-C ,ios,iphone开发基础:picker控件详解与使用,(实现省市的二级联动)
- iPhone开发之UIScrollView滚动组件的使用(六)通过代理实现手势缩放——(拖线实现)
- iPhone 中使用NSLocalizedString实现国际化
- iphone中使用NSoperation实现图片异步加载
- iphone之使用讯飞语音sdk实现语音识别功能
- iphone中使用第三方工具(RegexKitLite)实现正则表达式
- iphone中使用第三方工具(RegexKitLite)实现正则表达式
- iphone 图表抖动效果实现-左上角小黑叉实习(层的使用)
- iPhone中使用NSLocalizedString实现国际化
- iphone开发之UIButton按钮的使用(一)拖线实现 多个按钮分别用多个方法实现事件监听