[Xcode10 实际操作]九、实用进阶-(9)陀螺仪设备的使用

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

在项目导航区,打开视图控制器的代码文件【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, width: 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)\n"
55                     message += "Y:\(accelerometerData!.acceleration.y)\n"
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 }

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

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

猜你喜欢

转载自www.cnblogs.com/strengthen/p/10088864.html