ios - 如何在 iOS 中使用 Swift 正确检索加速度计数据?

标签 ios iphone swift core-motion

我正在尝试从 iPhone 的加速度计(我自己的 iPhone 5s)记录数据,并使用 String(format: "%.2f", data) 在屏幕上为该数据设置标签其中数据是我要记录的特定轴的值。为此,我设置了一个 CMMotionManager 并开始记录加速度计数据,并且我有一个不断更新标签中文本的计时器。但是,我从 Xcode 收到错误消息:“ fatal error :在展开可选值时意外发现 nil”。相关代码如下:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    //if accelerometer can be used, start it
    if (motionManager.accelerometerAvailable) {

        motionManager.accelerometerUpdateInterval = 0.1

        motionManager.startAccelerometerUpdates()
        let timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
    }



}

func update () {
    if (motionManager.accelerometerActive) {

        accelX.text = String(format: "%.2f", motionManager.accelerometerData.acceleration.x)
    }

}

当我将 accelX.text 赋值更改为简单字符串时,错误停止,因此我认为创建错误的可选变量与加速度计有关。不过,据我所知,如果您有任何建议,或者如果我做的完全错误并且有更好更简单的方法,如果您能帮助我,我将不胜感激。

最佳答案

NSHipster有一篇很好的文章讲核心动议:http://nshipster.com/cmdevicemotion/

使用运动数据定期更新 UI 的更好方法是使用如下所示的模式:

if manager.accelerometerAvailable {
     manager.accelerometerUpdateInterval = 0.1
     manager.startAccelerometerUpdatesToQueue(NSOperationQueue.mainQueue()) {
     [weak self] (data: CMAccelerometerData!, error: NSError!) in
          accelX.text = String(format: "%.2f", data.acceleration.x)
     }
}

关于ios - 如何在 iOS 中使用 Swift 正确检索加速度计数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27768689/

相关文章:

iphone - 我应该直接连接到 CouchDB 的套接字并传递 HTTP 请求还是使用 node.js 作为代理?

ios - 将 subview 置于一切之上,但置于另一个 UIView 之下

objective-c - 任何对象到 CGPoint

ios - 否定 Objective-C 的 @available 关键字

ios - 从库中选择照片时如何禁用 UITapGestureRecognizer?

ios - 为 iOS 共享自定义 URL

ios - 将iOS应用程序从32位升级到64位

iphone - Xcode 'Build and Archive' 菜单项已禁用

json - 在 Swift 中解码 Codable

ios - 导航 Controller 显示黑屏