iOS中计步器功能的使用

传感器是一种监测装置,能高手到被监测到的信息,并能将高手到的信息,按照一定的规律转换电信号。

iPhone中常见的传感器:
***环境光传感器:监测周围环境亮度。如屏幕根据环境自动调节亮度、拍照时是否打开闪光灯。
***距离传感器:监测是否所有物品靠近手机屏幕。如打电话时手机贴到耳朵边,屏幕变暗;微信中听语音的时候,靠近耳边声音会自动变小。
***磁力计传感器:从磁场获取方向信息。如导航方向,指南针。
***内部温度传感器:监测设备内部温度。
***湿度传感器:简单说,温度传感器类似化学中的试纸,一遇到水就会变红。通常apple售后在检测设备时,首先会取出手机内的“试纸”,判断设备是否进水,如果进水就不在保修范围之内。
***陀螺仪:检测设备在X、Y、Z轴旋转的角速度。主要是应用在游戏中和一些VR场景中。
***加速计:检测设备在X、Y、Z轴旋转的加速度。应用场景有微信的摇一摇和运动类型app中的计步器。

以前计步器实现思路,根据定位计算两个地点的距离,然后根据距离除以人行走的每一步的大概距离,但是这种做法计算不是很准确,iOS7开始苹果推出新的API,可以实现计步器。同样是在CoreMotion框架中,主要使用CMStepCounter这个类。所以第一件事实导入#import 这个头文件.代码如下。有一点要格外强调,@property (strong, nonatomic) CMPedometer *pedonmeter;这个要设置成属性,主要是为了保证其生命周期。如果没有创建成属性,计步器的功能将无法使用。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.label.text = @"计步器";
    self.label.frame = CGRectMake(50, 200, 300, 40);
    
    //这个API只支持iOS8及以后
    // 1.判断计步器是否可用
    if (![CMPedometer isStepCountingAvailable]) {
        NSLog(@"计步器不可用");
        return;
    }
    // 2.创建计步器对象
     CMPedometer *pedometer= [[CMPedometer alloc] init];
    self.pedonmeter = pedometer;
    // 3.开始计步  [NSDate date]表示从现在开始计步
    [self.pedonmeter startPedometerUpdatesFromDate:[NSDate date] withHandler:^(CMPedometerData *pedometerData, NSError *error) {
        if (error) {
            return;
        }
        //行走步数
        NSLog(@"steps = %@", pedometerData.numberOfSteps);
        //行走距离
        NSLog(@"distance = %@",pedometerData.distance);
        //这里是子线程,要回到主线程更新UI
        dispatch_async(dispatch_get_main_queue(), ^{
             self.label.text = [NSString stringWithFormat:@"%@sss",pedometerData.numberOfSteps];
        });
    }];
    //4.查询前两天走了多少步(做多查询七天)
    NSDateFormatter *fmt = [[NSDateFormatter alloc]init];
    fmt.dateFormat = @"yyyy-MM-dd";
    //这里的步数是01-07的晚上12点,到01-09的晚上的12点,总共的步数。实际就是01-08,01-09这两天总共的步数
    NSDate *formDate = [fmt dateFromString:@"2017-01-08"];
    NSDate *toDate = [fmt dateFromString:@"2017-01-10"];
    [self.pedonmeter queryPedometerDataFromDate:formDate toDate:toDate withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
        if (!error) {
            NSLog(@"%@",pedometerData.numberOfSteps);
        }
    }]; 
}

你可能感兴趣的:(iOS中计步器功能的使用)