swift -- 计步器CMPedometer的使用
最近公司接了个项目,是一款运动类型的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的使用的更多相关文章
- iOS开发 传感器(加速计、摇一摇、计步器)
一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...
- iOS开发——高级篇——传感器(加速计、摇一摇、计步器)
一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...
- Swift 3 新特性和迁移详解
写在前面 Swift 3.0 正式版发布了差不多快一个月了,断断续续的把手上和 Swift 相关的迁移到了Swift 3.0.所以写点小总结. 背景 代码量(4万行) 首先,我是今年年初才开始入手 S ...
- IOS 计步器
这篇博客介绍的是当前比较流行的“计步器”-只是简单的知识点 计步器的实现在IOS8开始进行了改变. 但是我会对之前之后的都进行简单介绍. IOS 8 - // // ViewController.m ...
- Swift的属性,方法,下标脚本以及继承
从这篇章节起,Swift编程语言指南大部分的重要内容在于概念,代码并非太多.理解Swift的面向对象理念,语法以及类结构,构造析构过程对于非常好的应用Swift语言将会有比較大的帮助. 属性 存储属性 ...
- iOS 计步器的几种实现方式
代码地址如下:http://www.demodashi.com/demo/11658.html 这篇文章介绍两种可以获取计步数据的方法,一种是采用CMPedometer获取手机计步器数据,另一种是采用 ...
- iOS基础UI控件介绍-Swift版
iOS基础UI控件总结 iOS基础控件包括以下几类: 1.继承自NSObject:(暂列为控件) UIColor //颜色 UIImage //图像 2.继承自UIView: 只能相应手势UIGest ...
- iOS代码规范(OC和Swift)
下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
随机推荐
- 原声js实现addClass removeClass toggleClass效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 腾讯云Ubuntu挂载硬盘空间
第一.检查硬盘设备是否有数据盘 42G是系统盘那么就剩下了200G的剩余空间,那么下面我就把这200G挂载. 查询命令: sudo fdisk -l 我们可以看到有200GB的数据盘没有挂载,看好前 ...
- C#中关于系统用户信息持久化(接上文)
首先传几张效果图描述一下功能: 经过上文用户名和密码的验证后,就到了添加用户这一步,登陆后的用户可以添加新的用户,被添加的用户可以登陆系统. 这里会用到C#中的“正则表达式”对用户名格式进行判断,以及 ...
- RTX——第9章 任务运行在特权级或非特权级模式
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章教程为大家讲解 RTX 运行模式的一个重要知识点,特权级模式和非特权级模式,有些资料或者书籍将非特权 ...
- c++多态之——vptr指针
之前做过一个测试,在一个类中定义一个virtual修饰的函数时,sizeof这个类,发现类的大小多了恰好一个指针的字节大小,当初不明白,只是记住有这么一个特性.后来,发现它就是c++编译器给我们添加的 ...
- 【C++程序员学 python】python 之奇葩地方
一.python 奇葩之一:没有花括号.没有分号 先来一个C类型的函数 void main() { int i = 0; for(int j = 0; j< 6;j++) { i = i +j; ...
- js中Math.round、parseInt、Math.floor和Math.ceil小数取整小结【转】
[摘要:之前常常正在代码中看到Math.round.parseInt.Math.floor战Math.ceil那四个函数,固然晓得效果皆能够返回一个整数,然则对他们四者的差别照样没有太清晰,本日便做一 ...
- 手风琴式焦点图jQuery特效
手风琴式焦点图jQuery特效是一款鼠标点击人物图像滑动切换案例说明信息代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class="ag-cont ...
- 【WPF】ListBox使用UserContrl作为子控件,引入UserContrl界面
<ListBox x:Name="housePlansLB" Margin="0" ItemsSource="{Binding HousePla ...
- C语言 · 成绩的等级输出
输入一个百分制的成绩t后,按下式输出它的等级.等级为:90~100为A,80~89为B,70~79为C,60~69为D,0~59为E. 样例输入 98 样例输出 A #include<std ...