2016-11-02 4 views
2

У меня есть следующий код от Objective-C, он отлично работает.Swift 3 CMMotionManager startGyroUpdates не работает

_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.

+1

Он работал после создания 'motionManager' в качестве переменной экземпляра. –

ответ

0

попробовать это в методе вашего класса:

// 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/скор 3.x и устройство IOS 10.2.1 (14D27)

PS обязательно использовать список захвата для предотвращения сохранения циклов при использовании себя:

{ [unowned self] in 
    ... 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^