gpt4 book ai didi

Swift 3 CMMotionManager startGyroUpdates 不工作

转载 作者:搜寻专家 更新时间:2023-11-01 05:35:52 32 4
gpt4 key购买 nike

我从 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。

最佳答案

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

// 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) 上测试

附言如果使用 self,请务必使用捕获列表来防止保留周期:

{ [unowned self] in
...
}

关于Swift 3 CMMotionManager startGyroUpdates 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40382979/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com