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

话不多说,代码如下:

1、准备

//    计步器
var myTextView = UITextView()
var pedometer = CMPedometer()
var myBtn = UIButton()

2、在plist文件中添加相关权限描述:

Privacy - Motion Usage Description  :String    计步器需要获取您的运动信息

3、具体代码如下:

    myBtn.frame = CGRect(x:,y:,width:kScreenWidth-,height:)
myBtn.setTitle("按钮", for: .normal)
myBtn.setTitle("倒计时中", for: .disabled)
myBtn.backgroundColor = UIColor.orange
myBtn.setTitleColor(UIColor.white, for: .normal)
myBtn.setTitleColor(UIColor.blue, for: .disabled)
myBtn.addTarget(self, action: #selector(btnClick), for: .touchUpInside)
self.view.addSubview(myBtn) func btnClick(){
self.startPedometerUpdates() } // ---------------------------------计步器--------------------------------------------
func creatPedometer(){
myTextView.frame = CGRect(x:,y:,width:kScreenWidth-,height:)
self.view.addSubview(myTextView) // 创建触发按钮
myBtn.frame = CGRect(x:,y:,width:kScreenWidth-,height:)
myBtn.setTitle("按钮", for: .normal)
// myBtn.setTitle("倒计时中", for: .disabled)
myBtn.backgroundColor = UIColor.orange
// myBtn.setTitleColor(UIColor.white, for: .normal)
// myBtn.setTitleColor(UIColor.blue, for: .disabled)
myBtn.addTarget(self, action: #selector(btnClick), for: .touchUpInside)
self.view.addSubview(myBtn)
} // 开始获取步数统计数据
func startPedometerUpdates(){ // 判断设备支持情况
guard CMPedometer.isStepCountingAvailable() else {
self.myTextView.text = "\n当前设备不支持获取步数\n"
return
} // 获取今天凌晨时间
let cal = Calendar.current
var comps = cal.dateComponents([.year,.month,.day], from: Date())
comps.hour =
comps.minute =
comps.second =
let midnightOfToday = cal.date(from: comps) //初始化并开始实时获取数据
self.pedometer.startUpdates (from: midnightOfToday!, withHandler: { pedometerData, error in
//错误处理
guard error == nil else {
print(error!)
return
} //获取各个数据
var text = "---今日运动数据---\n"
if let numberOfSteps = pedometerData?.numberOfSteps {
text += "步数: \(numberOfSteps)\n"
}
if let distance = pedometerData?.distance {
text += "距离: \(distance)\n"
}
if let floorsAscended = pedometerData?.floorsAscended {
text += "上楼: \(floorsAscended)\n"
}
if let floorsDescended = pedometerData?.floorsDescended {
text += "下楼: \(floorsDescended)\n"
}
if #available(iOS 9.0, *) {
if let currentPace = pedometerData?.currentPace {
text += "速度: \(currentPace)m/s\n"
}
} else {
// Fallback on earlier versions
}
if #available(iOS 9.0, *) {
if let currentCadence = pedometerData?.currentCadence {
text += "速度: \(currentCadence)步/秒\n"
}
} else {
// Fallback on earlier versions
} // 在线程中更新文本框数据
DispatchQueue.main.async { self.myTextView.text = text
} })

然后,测试了下,亲自去爬了3层楼梯,如下图:

基本的实现就完成了!

swift -- 计步器CMPedometer的使用的更多相关文章

  1. iOS开发 传感器(加速计、摇一摇、计步器)

    一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...

  2. iOS开发——高级篇——传感器(加速计、摇一摇、计步器)

    一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...

  3. Swift 3 新特性和迁移详解

    写在前面 Swift 3.0 正式版发布了差不多快一个月了,断断续续的把手上和 Swift 相关的迁移到了Swift 3.0.所以写点小总结. 背景 代码量(4万行) 首先,我是今年年初才开始入手 S ...

  4. IOS 计步器

    这篇博客介绍的是当前比较流行的“计步器”-只是简单的知识点 计步器的实现在IOS8开始进行了改变. 但是我会对之前之后的都进行简单介绍. IOS 8 - // // ViewController.m ...

  5. Swift的属性,方法,下标脚本以及继承

    从这篇章节起,Swift编程语言指南大部分的重要内容在于概念,代码并非太多.理解Swift的面向对象理念,语法以及类结构,构造析构过程对于非常好的应用Swift语言将会有比較大的帮助. 属性 存储属性 ...

  6. iOS 计步器的几种实现方式

    代码地址如下:http://www.demodashi.com/demo/11658.html 这篇文章介绍两种可以获取计步数据的方法,一种是采用CMPedometer获取手机计步器数据,另一种是采用 ...

  7. iOS基础UI控件介绍-Swift版

    iOS基础UI控件总结 iOS基础控件包括以下几类: 1.继承自NSObject:(暂列为控件) UIColor //颜色 UIImage //图像 2.继承自UIView: 只能相应手势UIGest ...

  8. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

  9. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

随机推荐

  1. 手动挡C1驾驶学车@长建驾校

    2015-11-01 下午取钱去长建驾校报名学车 4600(学费) + 100(暂住证) + 30(照片) + 10(体检) 2015-11-14 8:00-12:00 理论课2 光盘10  2015 ...

  2. [转]采购文件中 RFI、RFQ、RFP、IFB的区别

    原文:http://www.douban.com/group/topic/23426427/ [PMBOK的描述]  采购文件用于征求潜在卖方的建议书.如果主要依据价格来选择卖方(如购买商业或标准产品 ...

  3. python map函数的使用

    python2 中的map函数返回列表 python3 中的map函数返回迭代器 >>>def square(x) : # 计算平方数 ... return x ** 2 ... & ...

  4. 用C#写一个多进程监控自动关机工具

    因为据说某server开着就很贵,所以我们跑完测试的job后就要赶紧关机才行,但是测试的job要跑很久,过程中又不需要干什么,所以就得有个守家的,有时候会走很晚.如果有一个自动化关机的工具就好了,当指 ...

  5. gvim配置到命令行可以使用

    下载安装gvim后,把gvim的安装目录添加到环境变量.

  6. 一款由jQuery实现的手风琴式相册图片展开效果

    之前我们有分享过很多jQuery手风琴样式的菜单,比如CSS3手风琴下拉菜单.今天要分享的jQuery手风琴效果很特别,它是手风琴样式的相册图片展开效果.我们只需点击图片缩略图即可展开当前的图片,并将 ...

  7. 风雪之隅(Laruence PHP开发组成员, Zend兼职顾问, Yaf, Yar, Yac, Opcache等项目作者、维护者.)

    http://www.laruence.com/?from=inf&wvr=5&loc=infblog

  8. 解决运行github项目build时间长问题

    运行github上的项目的时候,有时会build很长时间 可以打开项目所在目录修改这个文件:项目名XXX/gradle/wrapper/gradle-wrapper.properties 这个文件中的 ...

  9. 【Unity】使用SceneManager加载/切换场景

    一.直接切换 老版的(已弃用!): Application.LoadLevel(int index); // 参数是场景编号 Application.LoadLevel(string name); / ...

  10. uWSGI的各种部署方式

    As a back-end with web-server, speak the uwsgi protocol <uwsgi id = "uwsgibk"> <s ...