一尘不染

Motion Manager无法在Swift中运行

swift

我尝试在Swift中使用运动管理器,但是更新块内的日志从不打印。

    var motionManager: CMMotionManager = CMMotionManager()
    motionManager.accelerometerUpdateInterval = 0.01
    println(motionManager.deviceMotionAvailable) // print true
    println(motionManager.deviceMotionActive) // print false
    motionManager.startDeviceMotionUpdatesToQueue(NSOperationQueue.currentQueue(), withHandler:{
        deviceManager, error in
        println("Test") // no print
    })

    println(motionManager.deviceMotionActive) // print false

我的Objective-C实施效果很好。有人知道为什么没有调用我的更新块吗?


阅读 248

收藏
2020-07-07

共1个答案

一尘不染

那是因为当方法返回时,运动管理器实例被抛出了。您应该在类上创建一个属性以包含运动管理器。此外,您似乎只是在更改管理器accelerometerUpdateInterval,然后监视设备运动的变化。您应该deviceMotionUpdateInterval改为设置属性。

import CoreMotion

class ViewController: UIViewController {
    let motionManager = CMMotionManager()

    override func viewDidLoad() {
        super.viewDidLoad()

        motionManager.deviceMotionUpdateInterval = 0.01
        motionManager.startDeviceMotionUpdates(to: OperationQueue.current!) { deviceManager, error in
            print("Test") // no print
        }

        print(motionManager.isDeviceMotionActive) // print false
    }
}
2020-07-07