我只在函数内部得到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
答案 0 :(得分:0)
Ax
变量为nil
,因为您在处理程序中重新定义了Ax
,Ay
,Az
。此外,在主函数结束后调用处理程序,因此在从加速度计接收数据之前调用print()
语句。您需要重构代码才能考虑到这一点,可能会更新处理程序中的UI。