您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐