初学者:需要帮助使用Swift访问磁力计数据

时间:2015-02-27 04:10:58

标签: ios swift core-motion compass magnetometer

TLDR - 目标:构建一个简单的指南针应用程序

我在编码方面崭露头角,我挑战自己尝试学习新东西。我已经研究了编码的主要组件,并遵循了一些简单的教程。我也在这里学到很多东西。

但是,我仍然很难理解如何检索磁力计数据。我已经阅读了Obj-C和Swift中的Apple文档(Swift是新的,指南针教程几乎完全在Obj-C中完成),但它们仍然让人感到困惑,对于像我一样新的人来说,试图将其转换为swift。

我查找了类似的问题,甚至尝试从他们那里运行代码,我通常会得到至少1个错误,说明某些内容是预期的或缺失的或未定义的。阻止我甚至测试它...这使我走上了试图理解Xcode的错误语法的漫长道路。

我知道我必须在我的设备上进行测试,否则我不会看到任何数据。我也知道我必须导入CoreMotion,然后使用CMMotionManager作为一个网关'检索数据,然后定义更新间隔。但我还不清楚如何构建实际检索数据的那部分代码。

简而言之,我只想让准系统最简单的方法来检索数据并在我移动手机时打印。我们欢迎对这个过程进行愚蠢的解释。我保证不会被冒犯,事实上我很高兴。

有教学情绪的人吗?

2 个答案:

答案 0 :(得分:1)

如果您想构建一个简单的指南针应用,我建议您先使用CLLocationManager而不是CMMotionManager。您实施locationManager(didUpdateHeading:) CLLocationManagerDelegatedocs)的CLLocationManager方法。此外,您创建viewDidLoaddocs)并开始标题更新,例如在class MyViewController: UIViewController, CLLocationManagerDelegate { var locationManager: CLLocationManager! override func viewDidLoad() { super.viewDidLoad() locationManager = CLLocationManager() locationManager.delegate = self locationManager.startHeadingUpdates() } override func locationManager(_ manager: CLLocationManager!, didUpdateHeading newHeading: CLHeading!) { println("New heading \(newHeading.magneticHeading)") // TODO: update your UIViews that draw the compass here. } } 中您可以在视图控制器中执行此操作,XCode为您创建:

viewWillAppear

这可以帮助您入门,但对于实际应用程序,您可能希望开始和停止使用viewDidDisappear和{{1}}方法更新标题。

答案 1 :(得分:1)

您需要确保您的应用已正确要求获得许可并正确设置了plist

代码段:

    // don't forget iOS 8 wants the plist value too!
    if (locationManager.respondsToSelector(Selector("requestWhenInUseAuthorization"))) {
        locationManager.requestWhenInUseAuthorization()
    }