最近公司接了個項目,是一款運動類型的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層樓梯,如下圖:
基本的實現就完成了!
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答