天天看点

iOS传感器开发——加速度传感器,螺旋仪传感器,磁力传感器的应用(一)iOS传感器开发——加速度传感器,螺旋仪传感器,磁力传感器的应用

iOS传感器开发——加速度传感器,螺旋仪传感器,磁力传感器的应用

一、引言

       通过加速度传感器,螺旋仪传感器和磁力传感,我们可以获取到手机在当前三维空间中的形态,加速度传感器也被称作重力感应。在一些赛车游戏中可以广泛得到应用。在iOS5之前,iPhone支持的传感器有限,关于加速度传感器的管理用UIAccelerometer这个类负责,iOS5之后,有关设备空间信息的管理交由了CoreMotion这个框架,CoreMotion将多种传感器统一进行管理计算。

二、使用UIAccelerometer获取设备空间位置

       虽然在iOS5之后这个类被弃用了,但是和其他大多被弃用的方法类似,在新的iOS版本中,是兼容旧方法的,我们依然可以使用这个类来获取简单的设备空间信息。

       我们主要使用到的类和代理方法如下:

//设备信息对象类

@interface UIAcceleration : NSObject

//加速度传感器的时间戳

@property(nonatomic,readonly) NSTimeInterval timestamp;

//x方向值

@property(nonatomic,readonly) UIAccelerationValue x;

//y方向值

@property(nonatomic,readonly) UIAccelerationValue y;

//z方向值

@property(nonatomic,readonly) UIAccelerationValue z;

@end

上面的UIAccelerationValue就是double类型。

加速度传感器获取的属性是设备在三维空间的角度属性,借用下面这张图:

iOS传感器开发——加速度传感器,螺旋仪传感器,磁力传感器的应用(一)iOS传感器开发——加速度传感器,螺旋仪传感器,磁力传感器的应用

如果将设备这样立在桌面上,设备的三维坐标器如图,我们将设备已Z轴移动的时候,向右x为正,向左为负,其他两轴类似。

//加速度管理类

@interface UIAccelerometer : NSObject

//获取单例对象

+ (UIAccelerometer *)sharedAccelerometer;

//刷新频率

@property(nonatomic) NSTimeInterval updateInterval;

//代理

@property(nullable,nonatomic,weak) id<UIAccelerometerDelegate> delegate;

UIAccelerometer是管理类,通过单例方法获取到实例对象。

@protocol UIAccelerometerDelegate<NSObject>

@optional

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration NS_DEPRECATED_IOS(2_0, 5_0)  __TVOS_PROHIBITED;

这个代理方法是刷新信息的回调,会以我们设置的帧率刷新。

举例代码如下:

@interface ViewController ()<UIAccelerometerDelegate>

@implementation ViewController

- (void)viewDidLoad {

   [super viewDidLoad];

   // Do any additional setup after loading the view, typically from a nib.

   [UIAccelerometer sharedAccelerometer].delegate=self;

   [UIAccelerometer sharedAccelerometer].updateInterval=1/60.0;

}

-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{

   NSLog(@"\n%f\n%f\n%f",acceleration.x,acceleration.y,acceleration.z);

  // NSLog(@"%f",acceleration.timestamp);