如何在功能外获取加速度计数据?

时间:2015-06-25 08:07:46

标签: ios swift core-motion

我只在函数内部得到x,y,z加速度计数据。

如何在外面获取这些值(我使用真实设备,iPhone 4)?

import CoreMotion
//...
var Ax: Double?
var Ay: Double?
var Az: Double?

if motionManager.accelerometerAvailable {
            self.motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue()) {
            (data, error) in
            dispatch_async(dispatch_get_main_queue()) {
                var Ax = data.acceleration.x
                var Ay = data.acceleration.y
                var Az = data.acceleration.z
            }
        }

    } else {
        println("Accelerometer is not available")
    }

println("\(Ax)") // nil value

这是第二个版本,但结果相同(哪一个更好,如果有?我需要加速度计的数据在后台和前景中):

import CoreMotion
//...
var Ax: Double?
var Ay: Double?
var Az: Double?

if motionManager.accelerometerAvailable {
        let queue = NSOperationQueue()
        motionManager.startAccelerometerUpdatesToQueue(queue, withHandler: {(data: CMAccelerometerData!, error: NSError!) in

            var Ax = "\(data.acceleration.x)"
            var Ay = "\(data.acceleration.y)"
            var Az = "\(data.acceleration.z)"
            }
        )

    } else {
        println("Accelerometer is not available")
    }

println("\(Ax)") // nil value

1 个答案:

答案 0 :(得分:0)

Ax变量为nil,因为您在处理程序中重新定义了AxAyAz。此外,在主函数结束后调用处理程序,因此在从加速度计接收数据之前调用print()语句。您需要重构代码才能考虑到这一点,可能会更新处理程序中的UI。