IOS实现基于CMPedometer的计步器

CMStepCount类在IOS8已经不推荐使用了,IOS8推荐使用CMPedometer类来处理用户健康和运动信息.下面是一个小小的demo来演示下,如何使用它,以及一些注意事项.

#import "ViewController.h"
#import <CoreMotion/CoreMotion.h> 

@interface ViewController () 

@property (weak, nonatomic) IBOutlet UILabel *stepLabel;
@property(nonatomic,strong) CMPedometer *stepter;
@property (weak, nonatomic) IBOutlet UILabel *totalLabel; 

@end 

@implementation ViewController 

- (void)viewDidLoad {
  [super viewDidLoad]; 

  if(![CMPedometer isStepCountingAvailable])
  {
    NSLog(@"计步器不可用");
    return;
  } 

  _stepter =[[CMPedometer alloc]init]; 

  NSTimeInterval secondsPerDay =24*60*60;
  NSDate *date =[NSDate date];
  NSDate *yesterDay =[date dateByAddingTimeInterval:-secondsPerDay]; 

  [_stepter startPedometerUpdatesFromDate:yesterDay withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) { 

    if(error)
    {
      NSLog(@"error ==%@",error);
    }else
    {
      NSNumber *steps =pedometerData.numberOfSteps;
      NSNumber *distance =pedometerData.distance; 

      NSDictionary *dic =@{
                 @"steps":steps,
                 @"distance":distance
                 }; 

      NSLog(@"过去一天你一共走了%@步,一共%@米",steps,distance); 

      [self performSelectorOnMainThread:@selector(refreshUI:) withObject:dic waitUntilDone:NO]; 

    } 

  }]; 

} 

-(void)refreshUI:(NSDictionary *)dic
{
  NSNumber *distance =dic[@"distance"];
  float meters =[distance floatValue]; 

  self.stepLabel.text =[NSString stringWithFormat:@"%@",dic[@"steps"]];
  self.totalLabel.text =[NSString stringWithFormat:@"%.2f",meters];
} 

- (void)didReceiveMemoryWarning {
  [super didReceiveMemoryWarning];
  // Dispose of any resources that can be recreated.
} 

@end 

此处还有一点需要注意:就是请在info.plist文件中加入你要访问用户健康和运动信息的描述,如下图

运行结果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 超精准的iOS计步器实现代码

    本文实例为大家分享了iOS计步器实现代码,供大家参考,具体内容如下 #import "ViewController.h" #import <CoreMotion/CoreMotion.h> @interface ViewController () @property (nonatomic, strong) CMStepCounter *conter; @property (weak, nonatomic) IBOutlet UILabel *stepLabel; @end

  • IOS计步器功能实现之Healthkit和CMPedometer

    介绍 CMPedometer:可以访问用户活动(可以访问计步数据) 适用ios8以上的系统 ios可看最下面说明 Healthkit :是ios系统中的健康应用 需要应用授权来访问健康数据(比如计步) 这两个有什么区别呢? 其实 Healthkit 也是 使用 CMPedometer 读取用户的步数和走的里程,当然计算的方法是在手机内部计算的, 它是利用 iphone5s 以上的m处理器来获取数据计算了,所以5s以下的设备是不支持 CMPedometer 手机计步的,当然有大牛可以利用重力传感器

  • 详解iOS 计步器的几种实现方式

    这篇文章介绍两种可以获取计步数据的方法,一种是采用CMPedometer获取手机计步器数据,另一种是采用HealthKit框架从手机健康App中获取计步数据.另外玩了一下写入数据到健康App.有描述不当之处,望指点. 花絮(用HealthKit框架构建app,写入数据到苹果健康app中,QQ和Keep等第三方app的运动数据都会随之改变,猜测它们的运动数据是直接从苹果健康app中获取,而且没有过滤掉其它数据来源.而微信运动的数据不会变,猜测其来源可能是使用CMPedometer类获取的,因为测试

  • IOS实现基于CMPedometer的计步器

    CMStepCount类在IOS8已经不推荐使用了,IOS8推荐使用CMPedometer类来处理用户健康和运动信息.下面是一个小小的demo来演示下,如何使用它,以及一些注意事项. #import "ViewController.h" #import <CoreMotion/CoreMotion.h> @interface ViewController () @property (weak, nonatomic) IBOutlet UILabel *stepLabel;

  • iOS之基于FreeStreamer的简单音乐播放器示例

    前提准备 为了能够有明确的思路来做这个demo,我下载了QQ音乐和网易云音乐,然后分别对比,最终选择了QQ音乐来参照,先是获取了其中的所有资源文件(如果有不知道怎么提取资源文件的,可以参考iOS提取APP中的图片资源),在这之后就是研究使用技术,这里我选择了FreeStreamer,虽然系统也有,但是该框架可能更好用点. 实现部分 在这之前,先来看看大概效果图吧 再看完效果图之后,我们就来看看这其中涉及到的几个难点吧(在我看开~) 1.先让播放器跑起来 这里我使用的是pods来管理三方库,代码如

  • swift计步器CMPedometer的使用方法

    最近公司接了个项目,是一款运动类型的APP,可以检测运动量(例如:步数,上下楼等).睡眠信息.速度等信息,因为以前粗略的了解过传感器方面的相关信息,知道主要是苹果设备内置的传感器在起作用,传感器的种类也很多,有兴趣的可以去查看苹果官方文档或者查阅大神们的博客都可以找到!但是一直也没有自己写一下,做个测试: 话不多说,代码如下: 1.准备 // 计步器 var myTextView = UITextView() var pedometer = CMPedometer() var myBtn = U

  • 基于ios逆向过程中lldb调试技巧(推荐)

    假如你准备在模拟器里面运行这个,你可以在"(lldb)"提示的后面输入下面的: (lldb) po $eax LLDB在xcode4.3或者之后的版本里面是默认的调试器.假如你正在使用老一点版本的xcode的话,你又GDB调试器.他们有一些基本的相同的命令,因此假如你的xcode使用的是"(gdb)"提示,而不是"(lldb)"提示的话,你也能够更随一起做,而没有问题. "po"命令是"print object&qu

  • iOS App开发中扩展RCLabel组件进行基于HTML的文本布局

    iOS系统是一个十分注重用户体验的系统,在iOS系统中,用户交互的方案也十分多,然而要在label中的某部分字体中添加交互行为确实不容易的,如果使用其他类似Button的控件来模拟,文字的排版又将是一个解决十分困难的问题.这个问题的由来是项目中的一个界面中有一些广告位标签,而这些广告位的标签却是嵌在文本中的,当用户点击文字标签的位置时,会跳转到响应的广告页. CoreText框架和一些第三方库可以解决这个问题,但直接使用CoreText十分复杂,第三方库多注重于富文本的排版,对类似文字超链接的支

  • 基于IOS实现带箭头的view

    我使用DrawRect进行的View的拉伸(是这样描述的吧??), 效果图也实现了类似于微信的View效果, 你可以看一看. 创建继承于UIView的视图 .h文件 // backGoundView @property (nonatomic, strong) UIView * _Nonnull backGoundView; // titles @property (nonatomic, strong) NSArray * _Nonnull dataArray; // images @proper

  • iOS开发项目- 基于WebSocket的聊天通讯(1)

    公司项目需要开发一个类似QQ.微信的即时IM聊天功能,做到实时监控消息,需要用的技术是websocket. 概述WebSocket: 1.1 为什么我们需要WebSocket这样的实时的通信协议? WebSocket是web通信方式的一种,像我们熟知的HTTP协议也是web通信方式的一种.但是我们知道HTTP协议是一种无状态的协议,其服务端本身不具备识别客户端的能力,必须借助外部的一些信息比如说session和cookie,才能与特定的客户端保持通信.也就是说我们所发送的每一个HTTP的请求都会

随机推荐