动作管理器不能在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实现工作良好。有人知道为什么我的更新块没有被调用吗?

这是因为当方法返回时,动作管理器实例被抛出。你应该在你的类上创建一个属性来包含动作管理器。此外,看起来您只更改了管理器的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
    }
}

我认为所有obj-c变量在swift中都是可选的(因为它们可以是nil),所以NSOperationQueue应该这样做:

MotionManager.startDeviceMotionUpdatesToQueue(NSOperationQueue!.currentQueue(),withHandler:{deviceManager,error in println("test")})

Apple文档在这里:

https://developer.apple.com/library/ios/documentation/CoreMotion/Reference/CMMotionManager_Class///apple_ref/快速/tdef/CMDeviceMotionHandler

国家

用于处理设备运动数据的块回调类型。

声明斯威夫特typealias CMDeviceMotionHandler = (

相关内容

  • 没有找到相关文章

最新更新