如何在功能之外获取加速度计数据?
How to get accelerometer data outside function?
我只在函数内部获取 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
Ax
变量是nil
,因为你在处理程序中重新定义了Ax
、Ay
、Az
。此外,处理程序在主要功能结束后被调用,因此 print()
语句在从加速度计接收数据之前被调用。您需要重构代码以考虑到这一点,可能会更新处理程序中的 UI。
我只在函数内部获取 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
Ax
变量是nil
,因为你在处理程序中重新定义了Ax
、Ay
、Az
。此外,处理程序在主要功能结束后被调用,因此 print()
语句在从加速度计接收数据之前被调用。您需要重构代码以考虑到这一点,可能会更新处理程序中的 UI。