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

基本的实现就完成了!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。