iOS App中调用iPhone各种感应器的方法总结

2020-01-15 16:01:57刘景俊

//设备的欧拉角pitch
@property(readonly, nonatomic) double pitch;
//设备的欧拉角yaw
@property(readonly, nonatomic) double yaw;
//设备状态的旋转矩阵
@property(readonly, nonatomic) CMRotationMatrix rotationMatrix;
//设备状态的四元数
@property(readonly, nonatomic) CMQuaternion quaternion;
@end
2、CoreMotion的使用
CoreMotion有两种使用方式,一种是我们主动向manager索取数据,一种是通过回调让manager将数据传给回调给我们,这两种方式分别称作pull方式和push方式。
pull方式:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //创建管理对象
    manager= [[CMMotionManager alloc]init];
    //开启加速度更新
    [manager startAccelerometerUpdates];
    //开启螺旋仪更新
    [manager startGyroUpdates];
    //开启状态更新
    [manager startMagnetometerUpdates];
    //创建定时器
    NSTimer * time = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updata) userInfo:nil repeats:YES];
    time.fireDate = [NSDate distantPast];
}

-(void)updata{
//获取数据
    NSLog(@"%f,%f,%fn%f,%f,%f",manager.accelerometerData.acceleration.x,manager.accelerometerData.acceleration.y,manager.accelerometerData.acceleration.z,manager.gyroData.rotationRate.x,manager.gyroData.rotationRate.y,manager.gyroData.rotationRate.z);
  
   
}

push方式:

   //创建管理对象
    manager= [[CMMotionManager alloc]init];
    //在当前线程中回调
    [manager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {
         NSLog(@"%f,%f,%fn%f,%f,%f",manager.accelerometerData.acceleration.x,manager.accelerometerData.acceleration.y,manager.accelerometerData.acceleration.z,manager.gyroData.rotationRate.x,manager.gyroData.rotationRate.y,manager.gyroData.rotationRate.z);
    }];

3、CoreMotion的更多属性和方法
@interface CMMotionManager : NSObject
{
@private
    id _internal;
}
//设置加速度传感器更新帧率
@property(assign, nonatomic) NSTimeInterval accelerometerUpdateInterval __TVOS_PROHIBITED;
//加速度传感器是否可用
@property(readonly, nonatomic, getter=isAccelerometerAvailable) BOOL accelerometerAvailable __TVOS_PROHIBITED;