首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 3 CMMotionManager startGyroUpdates不工作

Swift 3 CMMotionManager startGyroUpdates不工作
EN

Stack Overflow用户
提问于 2016-11-02 22:51:28
回答 1查看 1.4K关注 0票数 2

我从Objective-C得到了以下代码,它工作得很好。

代码语言:javascript
复制
_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,但它不起作用,它给出了各种各样的错误。到目前为止,我得到了这个代码。

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

发布于 2017-01-29 18:48:20

在您的类的方法中尝试执行以下操作:

代码语言:javascript
复制
// data members:
private var gyroPresent = false
private var manager : CMMotionManager?

。。

代码语言:javascript
复制
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和device iOS 10.2.1 (14D27)上测试

PS如果使用self,请确保使用捕获列表来防止保留周期:

代码语言:javascript
复制
{ [unowned self] in
   ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40382979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档