
106
|
第
3
章
本节讨论了如何访问设备在
3
个轴上的倾斜;要使用这些信息进行转向,请参考本
章
3.18
节。
在接收运动变更通知时,你可以用
CMMotionManager
的
topDeviceMotionUpdates()
来停止通知。
需要注意一点,苹果文档中警告不要使用主队列,因为通知发送的频率很好。我们
在这里使用主队列的原因仅仅是为了演示,从性能角度考虑,请使用后台队列,参
考问题
1.13
。
3.10
获得指北针方向
问题
如何知道用户正前方是什么方向(相对于正北)?
解决方案
首先,在项目中引入
Core Motion
框架,然后创建一个
CMMotionManager
对象,正
如本章
3.9
节所述。
接着,调用
startDeviceMotionUpdates(using:, to:, withHandler:)
方法,向系
统注册,以便
App
能够接收到设备的移动信息,同时向方法的第一个参数传递一
个
CMAttitudeReferenceFrame.XTrueNorthZVertical
参数:
motionManager.startDeviceMotionUpdates(
using: CMAttitudeReferenceFrame.xTrueNorthZVertical,
to: mainQueue) { (motion, error) in
//
确保
CMDeviceMotion
是有效的
guard let motion = motion else {
if let ...