在ios设备中都内置了一些传感器,什么是传感器?其实就是一种感应、检测的装置,就好比iphone上都有可以自动去调整手机的亮度,其实就是依赖于光线传感器的。
当然iphone中肯定不止这一个,比如说还有什么距离传感器啊,磁力计传感器,内部的温度传感器,加速度传感器等等。当然Mac电脑也是有传感器的,最简单的例子就是
背光键盘会在光线暗的时候打开。距离传感器的话就比如说是我们打电话的时候,人脸靠近的时候屏幕会变黑掉,当我们脸原理的时候又会自动亮起来。再比如说磁力计传感器,可以用于感应地球的磁场,获得方向的信息。
下面我们来写下怎么样去使用距离传感器去监听这个距离的远近,代码如下,首先是先去开启距离传感器的功能,然后再去注册通知,去监听
//1、开启距离传感器的功能
[UIDevice currentDevice].proximityMonitoringEnabled = YES;
//2、注册通知,监听通知
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(proximityStateDidChangeNotification) name:UIDevice
ProximityStateDidChangeNotification object:nil];
//监听方法
-(void)proximityStateDidChangeNotification
{
//3、获取通知的值,如果有东西靠近的就会去关闭屏幕远离之后会再次的开启
if([UIDevice currentDevice].proximityState)
{
NSLog(@"有人靠近");
}
else
{
NSLog(@"有人离开");
}
}
加速计对的原理其实就是检测设备在X、Y、Z轴上的加速度,也就是哪个方向有力的作用。因为力就会产生加速度。我们如果想要去检测的话,首先就得导入Core Motion这个框架,在Core Motion中获取数据有两种方式,一个push实时拿数据,拿的频率会比较高,看你自己设定的时间,另外一个是pull是需要的时候再去主动的去拿数据。
我们想要通过加速计在Core Motion中通过push方式拿数据的步骤就是
1、创建一个运动管理者的对象
2、判断加速计是否可用、
3、设置采集数据的时间间隔
4、开始采集数据
这里需要注意的是z轴手机反过来水平放置为1 正面朝上水平放置为-1 y轴竖着放置为-1 ,倒置竖着放为1 手机home键在左边横着放x值为1,在右边则为-1, 我们只要快速的去移动手机这个值就会变大。当然要看你方向朝着那边了。
//1、首先先创建CMMotionManager对象
self.motionMgr = [CMMotionManager new];
//2、判断加速计是否可用
if(![self.motionMgr isAccelerometerAvailable])
{
return;
}
//3、设置采样间隔
self.motionMgr.accelerometerUpdateInterval = 1;
//4、开始采样,这里我们是让在子线程上执行,因为需要调用很多次
[self.motionMgr startAccelerometerUpdatesToQueue:[NSOperationQueue new] withHandler:^(CMAccelerometerData * _Nullable
accelerometerData, NSError * _Nullable error) {
//5、获取加速计数据
CMAcceleration acceleration = accelerometerData.acceleration;
NSLog(@"x: %f, y: %f, z: %f",acceleration.x,acceleration.y,acceleration.z);
}];
我们还可以通过Pull方式来获取,就是我们在需要去取数据的时候再去进行获取就可以了,其实前两步步骤都一样区别就在于后面
//1、首先先创建CMMotionManager对象
self.motionMgr = [CMMotionManager new];
//2、判断加速计是否可用
if(![self.motionMgr isAccelerometerAvailable])
{
return;
}
//3、开始采样
[self.motionMgr startAccelerometerUpdates];
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSLog(@"%@",self.motionMgr.accelerometerData);
}
陀螺仪用来检测转动的角速度,用法其实也差不多的下面就只举一个Push方式了
//1、首先先创建CMMotionManager对象
self.motionMgr = [CMMotionManager new];
//2、判断陀螺仪是否可用
if(![self.motionMgr isGyroAvailable])
{
return;
}
//3、设置采样间隔
self.motionMgr.gyroUpdateInterval = 1;
//4、开始采样,这里我们是让在子线程上执行,因为需要调用很多次
[self.motionMgr startGyroUpdatesToQueue:[NSOperationQueue new] withHandler:^(CMGyroData * _Nullable gyroData, NSError *
_Nullable error) {
//5、获取陀螺仪数据
CMRotationRate rotationRate = gyroData.rotationRate;
NSLog(@"x: %f, y: %f, z: %f",rotationRate.x,rotationRate.y,rotationRate.z);
}];
磁力计可以检测磁场的变化,可以用于导航
//1、首先先创建CMMotionManager对象
self.motionMgr = [CMMotionManager new];
//2、判断磁力计是否可用
if(![self.motionMgr isMagnetometerAvailable])
{
return;
}
//3、设置采样间隔
self.motionMgr.magnetometerUpdateInterval = 1;
//4、开始采样,这里我们是让在子线程上执行,因为需要调用很多次
[self.motionMgr startMagnetometerUpdatesToQueue:[NSOperationQueue new] withHandler:^(CMMagnetometerData * _Nullable
magnetometerData, NSError * _Nullable error) {
//5、获取磁力计数据
CMMagneticField magneticField = magnetometerData.magneticField;
NSLog(@"x: %f, y: %f, z: %f",magneticField.x,magneticField.y,magneticField.z);
}];