我是iOS新手。我正在使用MotionKit从加速度计中检索数据。我可以在终端上看到加速计的值每0.1秒检索一次,遗憾的是标签只更新了一次。为什么标签没有更新?
@IBOutlet weak var xLabel: UILabel!
@IBOutlet weak var yLabel: UILabel!
@IBOutlet weak var zLabel: UILabel!
var xAccel = 0.0
var yAccel = 0.0
var zAccel = 0.0
private let queue = NSOperationQueue()
let motionKit = MotionKit()
override func viewDidLoad() {
super.viewDidLoad()
motionKit.getAccelerometerValues(interval: 0.1){
(x, y, z) in
println("x: \(x)")
println("y: \(y)")
println("z: \(z)")
println();
self.xAccel = x
self.yAccel = y
self.zAccel = z
self.xLabel.text = "\(self.xAccel)"
self.yLabel.text = "\(self.yAccel)"
self.zLabel.text = "\(self.zAccel)"
}
答案 0 :(得分:3)
由于此MotionKit框架作为块执行,您必须更新主队列中的UILabel,这样的事情将解决此问题,但仍然真的很乱
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var xLabel: UILabel!
@IBOutlet weak var yLabel: UILabel!
@IBOutlet weak var zLabel: UILabel!
var xAccel = 0.0
var yAccel = 0.0
var zAccel = 0.0
private let queue = NSOperationQueue()
let motionKit = MotionKit()
override func viewDidLoad() {
super.viewDidLoad()
motionKit.getAccelerometerValues(interval: 0.1){
(x, y, z) in
println("x: \(x)")
println("y: \(y)")
println("z: \(z)")
println();
self.xAccel = x
self.yAccel = y
self.zAccel = z
dispatch_async(dispatch_get_main_queue(), {
self.xLabel.text = "\(self.xAccel)"
self.yLabel.text = "\(self.yAccel)"
self.zLabel.text = "\(self.zAccel)"
});
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
希望这有帮助