swift计步器CMPedometer的使用方法

时间:2021-05-02

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

话不多说,代码如下:

1、准备

? 1 2 3 4 // 计步器 var myTextView = UITextView() var pedometer = CMPedometer() var myBtn = UIButton()

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

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

3、具体代码如下:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 myBtn.frame = CGRect(x:10,y:360,width:kScreenWidth-20,height:50) 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:20,y:100,width:kScreenWidth-20,height:200) self.view.addSubview(myTextView) // 创建触发按钮 myBtn.frame = CGRect(x:10,y:360,width:kScreenWidth-20,height:50) 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 = 0 comps.minute = 0 comps.second = 0 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层楼梯,如下图:

基本的实现就完成了!

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

原文链接:http://www.cnblogs.com/hero11223/p/7363998.html

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章