首先我们先了解一下我们需要的系统框架

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

金沙网址,Core Motion框架支持了一些预置的motion动作,比如步数、爬楼还有移动类型

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

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

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

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

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

当前设备是否可以获取速度+ isPaceAvailable

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

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

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

停止监测步数变化- 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"]]; } }]; }

相关文章