iOS中计步器功能的使用

作者: ZhengYaWei | 来源:发表于2017-01-15 17:12 被阅读111次

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

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

    以前计步器实现思路,根据定位计算两个地点的距离,然后根据距离除以人行走的每一步的大概距离,但是这种做法计算不是很准确,iOS7开始苹果推出新的API,可以实现计步器。同样是在CoreMotion框架中,主要使用CMStepCounter这个类。所以第一件事实导入#import <CoreMotion/CoreMotion.h>这个头文件.代码如下。有一点要格外强调,@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中计步器功能的使用

        本文链接:https://www.haomeiwen.com/subject/jazlbttx.html