iphone中加速器,陀螺仪,磁力计的使用和实现

#import "RootViewController.h"

#import //需要在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


你可能感兴趣的:(资料)