最近公司接了个项目,是一款运动类型的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. C# 延时函数 非Sleep

    1.示例: using System.Runtime.InteropServices; [DllImport("kernel32.dll")] static extern uint ...

  2. python map函数的使用

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

  3. 关于Java开发过程中质量提升-2自动化

    开发人员写代码过程中就实现自动代码检视,编辑器会提示编码规范错误,并给出正确实例,写完代码只需要提交到SVN库,然后启动自动化构建(可配置代码提交SVN后自动触发),测试环境中的项目马上和当前SVN库 ...

  4. RDLC设计

    1.rdlc报表的日期格式"yyyy/mm/dd 00/00/00"转换为"yyyy-mm-dd" =System.Convert.ToDateTime(Fie ...

  5. u-boot中网口处理--硬件部分

    1.  网口硬件方案: AT91SAM9G10 + DM9000CEP: DM9000CEP为MAC+PHY解决方案,与MCU链接通过8位或16位数据总线. 内部SRAM为16Kbyte. 2. DM ...

  6. LINQ教程一:LINQ简介

    一.为什么要使用LINQ 要理解为什么使用LINQ,先来看下面一个例子.假设有一个整数类型的数组,找到里面的偶数并进行降序排序. 在C#2.0以前,如果要实现这样的功能,我们必须使用'foreach' ...

  7. html块状元素、内联元素

    html块状元素.内联元素 原文在这 块级元素的分类 块级元素按照其应用于结构还是内容分为三种:结构化块状元素,终端块状元素,多目标块状元素. 一.结构化块状元素 这类元素用于构造文档的结构,一个好的 ...

  8. CSS圆角框,圆角提示框

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. file文件与base64字符串的相互转换

    今天心情不好,不想说话. /** * 文件转base64字符串 * @param file * @return */ public static String fileToBase64(File fi ...

  10. 【转】 web 测试使用的chrome插件

    1.二维码插件 https://chrome.google.com/webstore/detail/%E4%BA%8C%E7%BB%B4%E7%A0%81qr%E7%A0%81%E7%94%9F%E6 ...