iOS中的传感器---摇一摇, 计步器,距离感应,陀螺仪

前几天项目中用到了一下CoreMotion框架,觉得iOS中的传感器还是挺好玩的,又花了点时间去了解了一下iOS中其他一些常用的传感器应用,今天简单做下总结。 

iOS中的传感器大致有以下几种:

  1. 运动传感器\加速度传感器\加速计(Motion/Accelerometer Sensor)
  2. 环境光传感器(Ambient Light Sensor)
  3. 距离传感器(Proximity Sensor)
  4. 磁力计传感器(Magnetometer Sensor)
  5. 内部温度传感器(Internal Temperature Sensor)
  6. 湿度传感器(Moisture Sensor)
  7. 陀螺仪(Gyroscope)
    … …

网上找到这个图片,可以做下参考:

传感器应用场合

接下来针对常用的一些传感器,做下解释:

一 , 距离传感器的使用

    //打开传感器
    [UIDevice currentDevice].proximityMonitoringEnabled =YES;

    //监听有物品靠近还是离开
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(Change:) name:UIDeviceProximityStateDidChangeNotification object:nil];


-(void)Change:(NSNotificationCenter*)center{
    if ([UIDevice currentDevice].proximityState) {
        NSLog(@"物品靠近");
    }else{
        NSLog(@"物品离开");
    }
}

二,加速计,陀螺仪,磁力仪(CoreMotion)
1 加速计 : 可以理解为物体所受外力沿着三个轴的分量 (在物体静止或者匀速直线运动的情况下,外界的力指的地球牵引力,利用x y z三个方向的分量可以知道手机在三维空间内的一个状态,从而实现一些功能。 例如, 屏幕中有个箭头一直指向下方(重力投影在屏幕上的方向)。
加速计 x y z三个轴方向

获取x y z数据方式有两种:主动获取(pull),基于代码块获取(push)。

主动获取: 需要的时候调用系统方法去获取

// 创建CMMotionManager对象
self.motionManager = [[CMMotionManager alloc] init];  // ①
// 如果CMMotionManager的支持获取加速度数据
if (self.motionManager.accelerometerAvailable)
{
    [self.motionManager startAccelerometerUpdates];
    self.motionManager.accelerometerUpdateInterval= 0.1; //设定每0.1秒更新一次数据
}
else
{
    NSLog(@"该设备不支持获取加速度数据!");
}

//当需要x y z数据的时候,调用方法获取
     CMAcceleration acceleration=_motionManager.accelerometerData.acceleration;
    NSLog(@"%f---%f---%f",acceleration.x,acceleration.y,acceleration.z);

代码块获取: 设定更新时间,每次更新后主动返给我们

// 创建CMMotionManager对象
self.motionManager = [[CMMotionManager alloc] init];  // ①
// 如果CMMotionManager的支持获取加速度数据
if (self.motionManager.accelerometerAvailable)
{
    [self.motionManager startAccelerometerUpdates];
    self.motionManager.accelerometerUpdateInterval= 0.1; //设定每0.1秒更新一次数据
}
else
{
    NSLog(@"该设备不支持获取加速度数据!");
}


//此方法每0.1秒就会返回一次 x y z数据
  [self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
        //重力再各个轴上的分量
 NSLog(@" 加速度%@", [NSString stringWithFormat:@"加速计:X:%.3f,Y:%.3f,Z:%.3f",accelerometerData.acceleration.x,accelerometerData.acceleration.y,accelerometerData.acceleration.z]  );

}

2 陀螺仪
陀螺仪

陀螺仪与加速计类似,存在pull 与Push获取方法, 直接贴代码

// 如果CMMotionManager的支持获取陀螺仪数据
if (self.motionManager.gyroAvailable)
{
    [self.motionManager startGyroUpdates];
}
else
{
    NSLog(@"该设备不支持获取陀螺仪数据!");
}

//主动获取:
    CMGyroData* gyroData = self.motionManager.gyroData;
    self.gyroLabel.text = [NSString stringWithFormat:
        @"绕各轴的转速为\n--------\nX轴: %+.2f\nY轴: %+.2f\nZ轴: %+.2f",
        gyroData.rotationRate.x,
        gyroData.rotationRate.y,
        gyroData.rotationRate.z];


//自动获取:
 [self.motionManager startGyroUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMGyroData *gyroData, NSError *error) {

        NSLog(@"gyro ===   %@", [NSString stringWithFormat:@"旋转角度:X:%.3f,Y:%.3f,Z:%.3f",gyroData.rotationRate.x,gyroData.rotationRate.y,gyroData.rotationRate.z]  );

}

3 磁力仪

// 如果CMMotionManager的磁场数据可用
if (self.motionManager.magnetometerAvailable)
{
    // 主动请求获取磁场数据
    CMMagnetometerData* magnetometerData = self.motionManager.magnetometerData;
    self.magnetometerLabel.text =  [NSString stringWithFormat:
        @"磁场数据为\n--------\nX轴: %+.2f\nY轴: %+.2f\nZ轴: %+.2f",
        magnetometerData.magneticField .x,
        magnetometerData.magneticField .y,
        magnetometerData.magneticField .z];


自动更新
     self.motionManager startMagnetometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMMagnetometerData * _Nullable magnetometerData, NSError * _Nullable error) {

      @"磁场数据为\n--------\nX轴: %+.2f\nY轴: %+.2f\nZ轴: %+.2f",
        magnetometerData.magneticField .x,
        magnetometerData.magneticField .y,
        magnetometerData.magneticField .z];

    }  
 }
}

手机摇一摇(比较简单, 直接贴代码)

//开始摇一摇
-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{

    NSLog(@"用户摇一摇");
}
-(void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event{

//摇一摇被打断(比如摇的过程中来电话)

}

-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{
//摇一摇结束的时候操作

}

三, 计步器

要获取计步信息, 可以直接调用系统的健康数据,基于HealthKit框架的。 可以参考
http://www.jianshu.com/p/42e913588380

那么, 不用HealthKit如何实现计步那?
参考 http://www.jianshu.com/p/8f896172fb3d
简单实现方法如下

#import <CoreMotion/CoreMotion.h>
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *stepLabel;
@property(nonatomic,strong)CMPedometer *step;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    if (![CMPedometer isStepCountingAvailable ]) {
        NSLog(@"不可用");
        return;
    }
    //开始计步
    [self.step startPedometerUpdatesFromDate:[NSDate date] withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
        NSLog(@"%@",pedometerData.numberOfSteps);
        self.stepLabel.text =[NSString stringWithFormat:@"%@",pedometerData.numberOfSteps];
    }];

}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  在iOS应用开发有很多涉及硬件访问和传感器编程。本书我们将向大家介绍苹果iOS设备主要的传感器应用开发。本书是我们智捷iOS课堂团队编写iOS系列丛书的一本,目的是使一个有iOS开发基础的程序员通过本书的学习,能够开发iOS 硬件访问和传感器应用的程序。另外,对于没有iOS开发基础读者,我们推荐先阅读我们已经出版的《iOS开发指南——从0基础到App Store上线》(网站:http://www.iosbook1.com),这两本书都是我们编写的,知识体系衔接的很好。 更多关于本书内容请关注本书网站http://www.51work6.cn,本书页面http://www.51work6.cn/?page_id=1426 更多iOS开发相关视频教程请关注http://v.51work6.com    本书是介绍了iOS设备主要的传感器应用开发的相关知识,其包括手势识别、加速度计、陀螺仪、指南针、磁力计、照相机、摄像头、音频设备访问、定位和蓝牙通信等。而且全部采用基于iOS 7最新的API。    全书分为9章:开篇综述、手势识别、加速度计与陀螺仪、指南针与磁力计、照相机与摄像头、音频设备访问、使用蓝牙、定位和iOS敏捷开发项目实战——增强现实版本铅锤应用。    第2章介绍了手势识别,通过两种方式实现iOS常用手势,这些手势包括了:Tap(点击)、Long Press(长按)、Pan(拖动)、Swipe(滑动)、Rotation(旋转)和Pinch(手指的合拢和张开)。    第3章介绍了加速度计与陀螺仪,加速度计与陀螺仪是可以感知设备运动的两个传感器,通过这些传感器,我们可以开发出很多有趣的应用和游戏。    第4章我们介绍了磁力计,磁力计可以感知周围的磁场,可以开发指南针、罗盘等导航应用,还可以开发特斯拉计(或高斯计)等感知磁场强度的应用等。    第5章我们介绍了照相机与摄像头,对于iOS设备,它们事实上是一个硬件,这一章我们介绍了图片抓取和视频捕获等技术。    第6章我们介绍了音频设备访问,音频的输入是通过麦克风设备实现,而音频的输出是通过扬声器设备实现的。本章我们介绍AVFoundation框架实现音频播放和音频录制。    第7章我们介绍了使用蓝牙,在蓝牙4.0之后将通信模式分为高速和低速类型。高速类型是传统蓝牙,在iOS高速蓝牙通信开发可以通过Game Kit实现。低速类型被称为低功耗蓝牙(BLE Bluetooth low energy),可以连接一些量测型传感器,例如:心率监视器、血压计和温度计等,开发BLE可以通过CoreBluetooth.framework实现。本章我们重点介绍Game Kit和低功耗蓝牙通讯。    第8章我们介绍了定位技术,介绍了iOS设备如何实现定位应用开发,其包括:定位服务编程、地理信息编码和地理信息反编码。此外,还介绍了苹果的微定位技术iBeacon,以及接近传感器。    第9章是项目实战,通过增强现实版本铅锤应用介绍了iOS敏捷开发过程。本项目用到了视频捕获实现的增强现实技术,还有加速度计等传感器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值