【问题标题】:Swift 3 CMMotionManager startGyroUpdates not workingSwift 3 CMMotionManager startGyroUpdates 不起作用
【发布时间】:2016-11-02 14:51:27
【问题描述】:

我从 Objective-C 获得了以下代码,效果很好。

_motionManager = [[CMMotionManager alloc] init];
_motionManager.gyroUpdateInterval = 1.0/60.0;

[_motionManager startGyroUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMGyroData *gyroData, NSError *error)
{

        xAcceleration = gyroData.rotationRate.x;
        yAcceleration = gyroData.rotationRate.y;

    [self acceleratorUpdates];

}];

我尝试将它转换为 Swift 3,但它不起作用,它给出了各种错误。到目前为止,我得到了这个代码。

let motionManager = CMMotionManager()

    motionManager.gyroUpdateInterval = 1.0 / 60.0


    motionManager.startGyroUpdates(to: OperationQueue.current!, withHandler: {(gyroData: CMGyroData, error: Error)
        var xAcceleration = gyroData.rotationRate.x
        var yAcceleration = gyroData.rotationRate.y

        print("xAcceleration: ", xAcceleration, "yAcceleration: ", yAcceleration)
    })

我想我在 withHandler 部分遗漏了一些东西。文档是这样说的:->在处理程序之后无效,但这没有帮助。来自网络的所有代码都是 Swift 2。

【问题讨论】:

  • 在将motionManager作为实例变量后它工作了。

标签: swift handler core-motion


【解决方案1】:

在你的类的方法中试试这个:

// data members:
private var gyroPresent = false
private var manager : CMMotionManager?

..

self.manager = CMMotionManager()
guard self.manager != nil else {
    // never here.. but... to be sure.
    print("no CMMotionManager")
    return
}

self.gyroPresent = self.manager!.isGyroAvailable
guard self.gyroPresent else {
    print("no GyroScope")
    return
}

self.manager!.gyroUpdateInterval = 0.1

// remember to stop it.. with:      self.manager?.stopGyroUpdates()
self.manager!.startGyroUpdates(to: OperationQueue.main) { (data: CMGyroData?, error: Error?) in
    if let  info = data?.rotationRate{
            print("\(info.x)  \(info.z)  \(info.z) ")
        }
    }

...

在 Xcode 8.2.1/swift 3.x 和设备 iOS 10.2.1 (14D27) 上测试

PS 如果使用 self,请务必使用捕获列表来防止保留循环:

{ [unowned self] in
   ...
}

【讨论】:

    猜你喜欢
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多