zoukankan      html  css  js  c++  java
  • [Xcode 实际操作]九、实用进阶-(9)陀螺仪设备的使用

    目录:[Swift]Xcode实际操作

    本文将演示陀螺仪设备的使用。

    在项目导航区,打开视图控制器的代码文件【ViewController.swift】

     1 import UIKit
     2 //导入需要用到的CoreMotion框架
     3 //该框架不仅提供实时的加速度值,还提供设备的三维姿态信息。
     4 import CoreMotion
     5 
     6 class ViewController: UIViewController {
     7 
     8     //添加一个属性,该属性是框架提供的一个运动管理类。
     9     //然后由这个类,去管理三种和运动相关的数据封装类。
    10     var motionManager:CMMotionManager!
    11     //继续添加一个标签属性,用来显示设备的三维姿态信息。
    12     var label:UILabel!
    13     
    14     override func viewDidLoad() {
    15         super.viewDidLoad()
    16         // Do any additional setup after loading the view, typically from a nib.
    17         
    18         //对标签对象进行初始化,并设置起位置在(40,80),尺寸为(240,90)
    19         label = UILabel(frame: CGRect(x: 40, y: 80,  240, height: 90))
    20         //设置标签对象的默认文字内容
    21         label.text = "Waiting"
    22         //设置标签对象的背景颜色为橙色
    23         label.backgroundColor = UIColor.orange
    24         //设置标签对象的行数为3行
    25         label.numberOfLines = 3
    26         //然后将标签对象,添加到当前视图控制器的根视图。
    27         self.view.addSubview(label)
    28         
    29         //初始化运动管理类,之后所有的操作,都会由这个类接管。
    30         motionManager = CMMotionManager()
    31         //设置运动管理类的更新频率为10赫兹,即每秒钟采样10次
    32         //设置更新周期为0.1秒
    33         motionManager.accelerometerUpdateInterval = 0.1
    34         
    35         //在使用前,首先检查传感器在设备上是否可用。
    36         if motionManager.isAccelerometerAvailable
    37         {
    38             //然后使用推送的方式,开始对传感器进行检测
    39             motionManager.startAccelerometerUpdates(to: OperationQueue.main, 
    40             withHandler: { (accelerometerData:CMAccelerometerData?, error:Error?) -> Void in
    41                 
    42                 //判断在运行过程中是否出现错误
    43                 if error != nil
    44                 {
    45                      //如果在运行过程中出现错误,则停止对传感器的检测。
    46                     self.motionManager.stopAccelerometerUpdates()
    47                 }
    48                 else
    49                 {
    50                     //处理运行正常的情况
    51                     //初始化一个字符串,用来存储设备在三个维度的加速度值
    52                     var message = ""
    53                     //获得设备在X、Y、Z轴方向上的加速度的值,并在字符串末尾添加回车符
    54                     message += "X:(accelerometerData!.acceleration.x)
    "
    55                     message += "Y:(accelerometerData!.acceleration.y)
    "
    56                     message += "Z:(accelerometerData!.acceleration.z)"
    57                     
    58                     //更新标签对象的文字显示内容
    59                     self.label.text = message
    60                 }
    61             })
    62         }
    63         else
    64         {
    65             //如果设备不支持陀螺仪设备,则在控制台打印输出警告日志。
    66             print("您的设置不支持加速器")
    67         }
    68     }
    69 
    70     override func didReceiveMemoryWarning() {
    71         super.didReceiveMemoryWarning()
    72         // Dispose of any resources that can be recreated.
    73     }
    74 }

    点击设备名称,弹出设备列表。需要在真实设备上测试陀螺仪。

    当设备自由移动或摆动时,标签对象会实时显示设备姿态的三维数值。

  • 相关阅读:
    68、成员列表初始化?
    67、类成员初始化方式?构造函数的执行顺序 ?为什么用成员初始化列表会快一 些?
    64、malloc申请的存储空间能用delete释放吗?
    63、new和delete的实现原理, delete是如何知道释放内存的大小的额?
    62、delete p、delete [] p、allocator都有什么作用?
    60、C++模板是什么,你知道底层怎么实现的?
    nyoj--814--又见拦截导弹(动态规划+贪心)
    hdoj--1950--Bridging signals(二分查找+LIS)
    nyoj--214--单调递增子序列(二)(二分查找+LIS)
    hdoj--1010--Tempter of the Bone(搜索+奇偶剪枝)
  • 原文地址:https://www.cnblogs.com/strengthen/p/10088864.html
Copyright © 2011-2022 走看看