iOS 实现计步器功能

作者: zyh1158 | 来源:发表于2016-05-25 15:56 被阅读2806次

现在越来越多的人关注运动和健康,iOS系统也在很早的时候就自带了健康APP,下面详细描述一下在我们开发中,怎么实现计步器功能。
首先我们先了解一下我们需要的系统框架:Core Motion

Core Motion框架支持了一些预置的motion动作,比如步数、爬楼还有移动类型(行走、骑行等等)

我们利用Core Motion框架就可以直接从设备读取我们需要的数据了,由于想获取motion动作是和iOS系统版本和使用的设备处理器有关系,所以QQ健康只支持iOS8及其以上系统的,在这里我也只说明iOS8及其以上系统的实现。

CMPedometer


在iOS8及其以上系统中我们可以使用CMPedometer类获取行走相关信息(步数、距离、上楼、下楼、当前速度等)。

当前设备是否可以获取步数
+ (BOOL)isStepCountingAvailable;

当前设备是否可以获取距离
+ (BOOL)isDistanceAvailable;

当前设备是否可以获取上下楼层数
+ (BOOL)isFloorCountingAvailable;

当前设备是否可以获取速度(s/m)
+ (BOOL)isPaceAvailable

当前设备是否可以获取节奏
+ (BOOL)isCadenceAvailable

根据开始和结束时间查询行走相关信息
- (void)queryPedometerDataFromDate:(NSDate *)start toDate:(NSDate *)end withHandler:(CMPedometerHandler)handler;

从某一时刻开始监测步数变化
- (void)startPedometerUpdatesFromDate:(NSDate *)start withHandler:(CMPedometerHandler)handler;

停止监测步数变化
- (void)stopPedometerUpdates;

了解完API后,我们看一下具体的使用:在View上创建两个lable,一个用来显示今日行走的步数

UILabel *textLable = [[UILabel alloc]initWithFrame:CGRectMake(50, 140, 200, 44)];
textLable.backgroundColor = [UIColor lightGrayColor];
[textLable setText:@"今日行走的步数"];
[self.view addSubview:textLable];
_stepsLable = [[UILabel alloc]initWithFrame:CGRectMake(50, 200, 100, 44)];
_stepsLable.backgroundColor = [UIColor orangeColor];
[self.view addSubview:_stepsLable];

我们需要把获取的步数存入内存中,使用NSUserDefaults单例来储存,如果单例中没有储存相应的数据我们让lable的显示为零。

//先判断设备是否支持计步功能
if ([CMPedometer isStepCountingAvailable]) {
        
        self.stepCounter = [[CMPedometer alloc]init];
        
        NSDate *toDate = [NSDate date];
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd"];
        NSDate *fromDate =
        [dateFormatter dateFromString:[dateFormatter stringFromDate:toDate]];
        
        [self.stepCounter startPedometerUpdatesFromDate:fromDate withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
            
            NSLog(@"numberOfSteps%@",pedometerData.numberOfSteps);
            [[NSUserDefaults standardUserDefaults]setObject:pedometerData.numberOfSteps forKey:@"pedometerSteps"];
           
           if(!pedometerData.numberOfSteps) {

                _stepsLable.text = @"0";
            }else
            {
                _stepsLable.text = [NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"pedometerSteps"]];
            }
            
        }];
    }

相关文章

  • iOS 实现计步器功能

    现在越来越多的人关注运动和健康,iOS系统也在很早的时候就自带了健康APP,下面详细描述一下在我们开发中,怎么实现...

  • iOS计步器实现

    前几天写一个关于养生和医疗的一个项目,要写一个类似微信运动的计步器功能,只好先去研究一下计步器功能实现。 之前在我...

  • 探索iOS计步器功能

    我的一个朋友是从事外出销售工作,老板不但要看他每天的业绩,也会去关注他每天在某个APP的行走步数。你应该知道的,业...

  • iOS Healthkit和CMPedometer区别

    转IOS 计步器功能 Healthkit和CMPedometer文/贪吃鱼(简书作者)原文链接:http://ww...

  • 基于三轴传感器的计步器代码实现-iOS

    原有iOS计步器采用系统框架swift语言调用 改为三轴传感器的计步器实现 开启陀螺仪采集三轴数据 计步核心 波峰...

  • ios开发实现画板功能

    ios开发实现画板功能 ios开发实现画板功能

  • iOS中@功能的完整实现

    iOS中@功能的完整实现 iOS中@功能的完整实现

  • iOS通过CMPedometer实现计步器

    CMPedometer是iOS8以后推出的CoreMotion框架中用于获取用户运动信息的类,我们可以获取到用户活...

  • iOS中计步器功能的使用

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

  • IOS 计步器功能 Healthkit和CMPedometer

    这几天在弄计步功能, 找了好久看了几篇零散的文章, 我自己做了总结, 我忘了我看文章的地址了, 没法附上转载连接了...

网友评论

  • 木_穆:请问报这个错Error Domain=CMErrorDomain Code=107 "(null)"
    是什么原因?怎么解决?百度、谷歌都找过了😅
    48c6ed7446a4:你是不是没声明CMPedometer
  • 崠崠:这么简单?

本文标题:iOS 实现计步器功能

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