这篇博客介绍的是当前比较流行的“计步器”-只是简单的知识点
计步器的实现在IOS8开始进行了改变。
但是我会对之前之后的都进行简单介绍。
IOS 8 -
// // ViewController.m // CX 计步器 // // Created by ma c on 16/4/12. // Copyright © 2016年 bjsxt. All rights reserved. // #import "ViewController.h" #import <CoreMotion/CoreMotion.h> @interface ViewController () @property (nonatomic, strong) CMStepCounter * counter; @end @implementation ViewController #pragma mark - <懒加载> - (CMStepCounter *)counter{ if (!_counter) { _counter = [[CMStepCounter alloc]init]; } return _counter; } - (void)viewDidLoad { [super viewDidLoad]; //判断计步器是否可用 if (![CMStepCounter isStepCountingAvailable]) { NSLog(@"计步器不可用"); return; } //开始计步 //startStepCountingUpdatesToQueue 选择在哪个线程里进行 //updateOn 对应的是每隔几秒后回调下面的block [self.counter startStepCountingUpdatesToQueue:[NSOperationQueue mainQueue] updateOn:2 withHandler:^(NSInteger numberOfSteps, NSDate * _Nonnull timestamp, NSError * _Nullable error) { if (error) { return ; } NSLog(@"可以在这里进行一些操作"); }]; } @end
IOS 8 +
// // ViewController.m // CX 计步器 // // Created by ma c on 16/4/12. // Copyright © 2016年 bjsxt. All rights reserved. // #import "ViewController.h" #import <CoreMotion/CoreMotion.h> @interface ViewController () @property (nonatomic, strong) CMPedometer * meter; @end @implementation ViewController #pragma mark - <懒加载> - (CMPedometer *)meter{ if (!_meter) { _meter = [[CMPedometer alloc]init]; } return _meter; } - (void)viewDidLoad { [super viewDidLoad]; //判断计步器是否可用 if (![CMPedometer isStepCountingAvailable]) { NSLog(@"计步器不可用"); return; } //开始计步 //在一段时间内的部步数与距离 [self.meter queryPedometerDataFromDate:[NSDate date] toDate:[NSDate dateWithTimeIntervalSinceNow:60*60] withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) { if (error) { NSLog(@"error===%@",error); } else { NSLog(@"步数===%@",pedometerData.numberOfSteps); NSLog(@"距离===%@",pedometerData.distance); } }]; } @end