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

基本的实现就完成了!

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

(0)

相关推荐

  • 实例讲解Swift中引用类型的ARC自动引用计数

    一.引言 ARC(自动引用计数)是Objective-C和Swift中用于解决内存管理问题的方案.在学习Objective-C编程时经常会学习到一个关于ARC的例子:在一个公用的图书馆中,每次进入一人就将卡插入,走的时候将自己的卡拔出拿走.图书馆系统会判定只要有卡插入,就将图书馆的灯打开,当所有卡都被取走后,将图书馆的灯关掉.这个例子对应于Objective-C中的对象声明周期管理十分贴切.每当一个对象增加一个引用时,其引用计数会加1,当一个引用被取消时,对象的引用计数减1,当引用计数减为0时,

  • Swift编程中用以管理内存的自动引用计数详解

    Swift 内存管理功能是通过使用自动引用计数(ARC)来处理.ARC用于初始化和取消初始化所述系统资源,从而释放使用的类实例的存储器空间当实例不再需要.ARC跟踪代码的实例有效地管理存储资源之间的关系的信息. ARC的功能 在每一次一个新的类实例被创建时ARC分配一块内存以存储信息 init() 关于实例类型和其值的信息存储在存储器中 当类实例不再需要它自动由 deinit() 释放,用于进一步类实例的存储和检索的存储空间 ARC保存在磁道当前参照类实例的属性,常量和变量,使得 deinit(

  • 详谈swift内存管理中的引用计数

    在swift中,每一个对象都有生命周期,当生命周期结束会调用deinit()函数进行释放内存空间. 观察这一段代码: class Person{ var name: String var pet: Pet? init(name: String){ self.name = name print("Person", name, "is initialized") } init(name: String, petName: String){ self.name = nam

  • swift计步器CMPedometer的使用方法

    最近公司接了个项目,是一款运动类型的APP,可以检测运动量(例如:步数,上下楼等).睡眠信息.速度等信息,因为以前粗略的了解过传感器方面的相关信息,知道主要是苹果设备内置的传感器在起作用,传感器的种类也很多,有兴趣的可以去查看苹果官方文档或者查阅大神们的博客都可以找到!但是一直也没有自己写一下,做个测试: 话不多说,代码如下: 1.准备 // 计步器 var myTextView = UITextView() var pedometer = CMPedometer() var myBtn = U

  • swift 字符串String的使用方法

    swift 字符串String的使用方法 1.声明 var str = "Hello, playground" //var str: String = "Hello, playground" // 空字符串 let emptyString = "" let emptyString2 = String() // 使用String()初始化字符串 let str2 = String("Hello, swift") 2.判断字符串是

  • 在 Swift 中测试 UIAlertController的方法

    最近我读了一篇在 Objective-C 中使用 control swizzling 测试 UIAlertController 的 文章 .这样的文章总是促使我寻找一种不使用 control swizzling 也可以测试同样东西的方法.虽然,我知道 swizzling 是开发者的一个非常有力的工具,但我个人是尽可能去避免去使用它的.事实上,在最近的六年时间里,我只在一个应用上用了 swizzling.所以我相信我们现在可以不使用 swizzling 来实现测试. 那么问题来了,如何在 Swif

  • swift 单例的实现方法及实例

    swift 单例的实现方法及实例 定义Game类,代码如下: public class Game { public var score = 0 public static let dafaultGame = Game() private init(){ } public func addscore(){ score += 10 } } 1.将init方法设置成private 2.定义静态变量 3.赋值给静态变量调用init方法 调用 let game1 = Game.dafaultGame ga

  • Swift中初始化init的方法小结

    前言 我们在深入初始化方法之前,不妨先再想想Swift中的初始化想要达到一种怎样的目的. 其实就是安全.在Objective-C中,init方法是非常不安全的:没有人能保证init只被调用一次,也没有人保证在初始化方法调用以后,实例的各个变量都完成初始化,甚至如果在初始化里使用属性进行设置的话,还可能会造成各种问题.虽然Apple也明确说明了不应该在init中使用属性来访问,但这并不是编译器强制的,因此还是会有很多开发者犯这样的错误. 所以Swift有了超级严格的初始化方法.一方面,Swift强

  • Swift循环遍历集合的方法总结分享

    前言 之前分享总结过OC循环遍历,文章点击这里:iOS遍历集合(NSArray,NSDictionary.NSSet)方法总结.随着Swift的逐渐完善,自己使用Swift开发的项目经验和知识逐渐积累,是时候总结一下Swift的循环遍历了.相信Swift一定会给你一些不一样的东西,甚至是惊喜,感兴趣的朋友们下面来一起看看吧. 第一种方式:for-in循环 OC延续了C语言的for循环,在Swift中被彻底改造,我们无法再使用传统形式的for循环了 遍历数组和字典: //遍历数组 let iosA

  • 详解Swift面向对象编程中的方法(method)

    struct Point { var x:Double var y:Double mutating func move(x:Double,y:Double) { self = Point(x: self.x+x,y: self.y+y) } static func name(){ print("Point") } } Point.name() 一.引言 方法只是一个术语,其实就是将函数与特定的类型结合,类.结构体.枚举都可以定义方法,方法又分为实例方法和类型方法,类型方法类似于Obje

  • swift 4自定义UITableCell的方法示例

    前言 本文主要给大家介绍了关于swift 4自定义UITableCell的相关内容,分享出来供大家参考学习价值,下面话不多说了,来一起看看详细的介绍吧 直接上图 新建MenuCell 创建一个类 MenuCell 继承 UITableViewCell 添加两个要实现的方法 override init(style: UITableViewCellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier:

  • swift表格控件使用方法详解(UITableview)

    本文实例为大家分享了swift表格控件的简单使用,供大家参考,具体内容如下 1.效果图 2.该控件(UITableView) 代码注意的地方: A.ViewController 不单单继承于 UIViewController,还有 UITableViewDelegate,UITableViewDataSource. B.要自己重新实现UITableView的3个方法.分别是:numberOfSectionInTableView(table:UITableView), tableView(tabl

  • Swift中使用可选类型完美解决占位问题

    可选类型是Swift中新引入的,功能很强大.在这篇博文里讨论的,是在Swift里,如何通过可选类型来保证强类型的安全性.作为例子,我们来创建一个Objective-C API的Swift版本,但实际上Swift本身并不需要这样的API. 为Dictionary增加objectsForKeys函数 在Objective-C中,NSDictionary有一个方法-objectsForKeys:NoFoundMarker:, 这个方法需要一个NSArray数组作为键值参数,然后返回一个包含相关值的数组

随机推荐