swift计步器CMPedometer swift计步器CMPedometer如何使用
稻草人11223 人气:0想了解swift计步器CMPedometer怎样使用的相关内容吗,稻草人11223在本文为您仔细讲解swift计步器CMPedometer的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点: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: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层楼梯,如下图:
基本的实现就完成了!
加载全部内容