• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

swift -- 计步器CMPedometer的使用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

最近公司接了个项目,是一款运动类型的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层楼梯,如下图:

基本的实现就完成了!


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
swift实现与OC的混编发布时间:2022-07-13
下一篇:
[Swift]LeetCode955.删列造序II|DeleteColumnstoMakeSortedII发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap