博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
swift -- 计步器CMPedometer的使用
阅读量:6267 次
发布时间:2019-06-22

本文共 3461 字,大约阅读时间需要 11 分钟。

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

话不多说,代码如下:

1、准备

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

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

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

3、具体代码如下:

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层楼梯,如下图:

基本的实现就完成了!

转载于:https://www.cnblogs.com/hero11223/p/7363998.html

你可能感兴趣的文章
软件项目管理|期末复习(二)
查看>>
直接调用VS.net2005中的配置界面
查看>>
程序员的自我修养五Windows PE/COFF
查看>>
关于字符集,编码格式,大小端的简单总结
查看>>
js string 转 int Number()
查看>>
课堂练习:ex 4-20
查看>>
20155328 2016-2017-2 《Java程序设计》 第8周学习总结
查看>>
python操作redis--string
查看>>
echarts图表初始大小问题及echarts随窗口变化自适应
查看>>
Inherits、CodeFile、CodeBehind的区别
查看>>
创建一个SimpleDlg
查看>>
使用XML生成菜单
查看>>
udp,tcp对于socket的写法
查看>>
第二周个人赛
查看>>
推断Windows版本号新方法
查看>>
2017-4-18 ADO.NET
查看>>
RSuite 一个基于 React.js 的 Web 组件库
查看>>
技术博客网址收藏
查看>>
python 金融分析学习
查看>>
授人以渔不如授人以鱼
查看>>