当前位置: 首页 > 知识库问答 >
问题:

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

酆浩邈
2023-03-14

我正在尝试记录来自iPhone加速度计(我自己的iPhone5s)的数据,并使用String(格式:"%.2f", data)在屏幕上为该数据设置标签,其中data是我要记录的特定轴的值。为此,我设置了一个CMMotionManager并开始记录加速度计数据,并且我有一个定时器可以不断更新标签中的文本。但是,我从Xcode收到一个错误:“致命错误:在展开可选值时意外发现为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时,错误停止。文本赋值给一个简单的字符串,所以我认为产生错误的可选变量与加速计有关。然而,据我所知,如果你有任何建议,或者如果我做得完全错误,并且有更好、更简单的方法,如果你能帮助我,我将非常感激。

共有2个答案

松越
2023-03-14

您可以获取x或y或z的值并打印所需值的警报

motionManager.accelerometerUpdateInterval = 5.0
motionManager.startAccelerometerUpdates(to: OperationQueue.current!) { (data, error) in
        if let myData = data{
            print(myData)
            if myData.acceleration.y < -0.2{
                let alert = UIAlertController(title: "Message ", message: "new text", preferredStyle: UIAlertControllerStyle.alert)
                alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
                self.present(alert, animated: true, completion: nil)

            }
        }
}
邓仲卿
2023-03-14

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上使用SceneKit开发一些代码,在我的代码中,我想确定全局z平面上的x和y坐标,其中z为0.0,而x和y由轻击手势确定。我的设置如下: 如你看到的。我有一个三角形,该三角形的高度为4个单位,宽为4个单位,并设置在以x,y(0.0,0.0)为中心的z平面(z = 0)上。相机是默认的SCNCamera,它沿负z方向看,我将其放置在(0,0,15)处。zNear和zFar的

  • “java.lang.OutOfMemoryError” .我想是因为我用了毕加索在我的RecycleView适配器。 代码如下:

  • 问题内容: 我在下面找到此定向测试代码,以查找JQTouch参考资料。这可以在移动Safari上的iOS模拟器中正常运行,但在Phonegap中无法正确处理。我的项目遇到了与杀死该测试页相同的问题。有没有办法在Phonegap中使用JavaScript来感知方向变化? 问题答案: 这是我的工作: * 根据MDN的定义, *2019年5月更新:已弃用,大多数浏览器均不支持。该事件与window.or

  • 我正在使用IMU(3轴加速度计、3轴陀螺仪、3轴磁力计),我想从加速度计数据中获取线性加速度。我知道传感器融合和使用陀螺仪数据(并获取方向)获取重力矢量的能力,从而消除其对相应轴的影响。 我走在正确的道路上吗?如果可以的话,你能帮忙吗?

  • 我有一个名为的couchbase bucket,其中包含将近2000个文档,我为此bucket创建了一个二级索引(idx_customer),以优化我的查询: 在couchbase查询监视器中执行时,查询命中索引。 但我认为,当从spring数据存储库播放时,它错过了索引。这主要是因为存储库中的排序和分页使我的查询在其他没有索引的查询中被翻译。 我使用此存储库中的spring数据在spring b

  • 我正在我的一个应用程序中使用谷歌登录。我找不到检索出生日期和性别的方法。有人能帮忙吗?这是我使用swift的代码