我从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。
发布于 2017-01-29 18:48:20
在您的类的方法中尝试执行以下操作:
// 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和device iOS 10.2.1 (14D27)上测试
PS如果使用self,请确保使用捕获列表来防止保留周期:
{ [unowned self] in
...
}https://stackoverflow.com/questions/40382979
复制相似问题