加速度获取

加速度通过CMMotionManager来获取

(一)头文件

#import "AccViewController.h"
#import <CoreMotion/CoreMotion.h>

@interface AccViewController ()<UIAccelerometerDelegate>
{
    NSTimer *updateTimer;
}

@property(nonatomic,strong) CMMotionManager *motionManager;

@end

(二)判断是否可用

   _motionManager=[[CMMotionManager alloc] init];
    if(_motionManager.deviceMotionAvailable)
    {
        [_motionManager startDeviceMotionUpdates];
    }else
    {
        NSLog(@"Motion unavailable");
    }

(三)获取当前运动状态

-(void) updateAcc
{
    NSLog(@"Update acc");
    if(_motionManager.deviceMotionAvailable)
    {
        CMDeviceMotion *motion=_motionManager.deviceMotion;
        accXvalue.text=[NSString stringWithFormat:@"%f",motion.rotationRate.x];
        accYvalue.text=[NSString stringWithFormat:@"%f",motion.rotationRate.y];
        accZvalue.text=[NSString stringWithFormat:@"%f",motion.rotationRate.z];
    }
}
可以通过CMDeviceMotion 获取当前手机的各种运动状态,不止上述中的三种。

(四)通过定时器实时更新
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    //使用定时器周期性获取设备移动信息
    updateTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(updateAcc) userInfo:nil repeats:YES];    [updateTimer fire];
    [updateTimer fire];
}

 

 

?//----------------------------------------------------完整代码/----------------------------------------------------//

#import "AccViewController.h"
#import <CoreMotion/CoreMotion.h>

@interface AccViewController ()<UIAccelerometerDelegate>
{
    NSTimer *updateTimer;
}

@property(nonatomic,strong) CMMotionManager *motionManager;

@end


UILabel *accXvalue;
UILabel *accYvalue;
UILabel *accZvalue;

@implementation AccViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor=[UIColor greenColor];
    
    UILabel *accX=[[UILabel alloc] init];
    accX.text=@"acc_X:";
    accX.frame=CGRectMake(100, 200, 100, 15);
    [self.view addSubview:accX];
    
    accXvalue=[[UILabel alloc] init];
    accXvalue.text=@"";
    accXvalue.frame=CGRectMake(210, 200, 150, 15);
    [self.view addSubview:accXvalue];
    
    UILabel *accY=[[UILabel alloc] init];
    accY.text=@"acc_Y:";
    accY.frame=CGRectMake(100, 300, 100, 15);
    [self.view addSubview:accY];
    
    accYvalue=[[UILabel alloc] init];
    accYvalue.text=@"";
    accYvalue.frame=CGRectMake(210, 300, 150, 15);
    [self.view addSubview:accYvalue];
    
    UILabel *accZ=[[UILabel alloc] init];
    accZ.text=@"acc_Z:";
    accZ.frame=CGRectMake(100, 400, 100, 15);
    [self.view addSubview:accZ];
    
    accZvalue=[[UILabel alloc] init];
    accZvalue.text=@"";
    accZvalue.frame=CGRectMake(210, 400, 150, 15);
    [self.view addSubview:accZvalue];
    
    _motionManager=[[CMMotionManager alloc] init];
    if(_motionManager.deviceMotionAvailable)
    {
        [_motionManager startDeviceMotionUpdates];
    }else
    {
        NSLog(@"Motion unavailable");
    }
    
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    //使用定时器周期性获取设备移动信息
    updateTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(updateAcc) userInfo:nil repeats:YES];    [updateTimer fire];
    [updateTimer fire];
}

-(void) updateAcc
{
    NSLog(@"Update acc");
    if(_motionManager.deviceMotionAvailable)
    {
        CMDeviceMotion *motion=_motionManager.deviceMotion;
        accXvalue.text=[NSString stringWithFormat:@"%f",motion.rotationRate.x];
        accYvalue.text=[NSString stringWithFormat:@"%f",motion.rotationRate.y];
        accZvalue.text=[NSString stringWithFormat:@"%f",motion.rotationRate.z];
    }
}

 

 
posted @ 2018-09-29 09:42  81192  阅读(286)  评论(0编辑  收藏  举报