微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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,height:200)
  self.view.addSubview(myTextView)
  
//    创建触发按钮
  myBtn.frame = CGRect(x:10,for: .normal)
//    myBtn.setTitle("倒计时中",for: .disabled)
  myBtn.backgroundColor = UIColor.orange
//    myBtn.setTitleColor(UIColor.white,for: .normal)
//    myBtn.setTitleColor(UIColor.blue,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层楼梯,如下图:

基本的实现就完成了!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐