2016-01-28 4 views
3

Я работаю над игрой SpriteKit, которая использует CMMotionManager для перемещения объекта на основе данных акселерометра и гироскопа. В настоящее время он отлично работает, если я тестирую приложение, и у меня есть устройство в руках, пока я сижу или стою. Однако, если вы кладете так, чтобы устройство не было плоским, а скорее наклонено на оси x (в ландшафтном режиме) с самого начала, объект перемещается в нижнюю часть, и поскольку эта ссылка находится так далеко, объект и играть в игру. Поэтому мне любопытно, как, если это возможно, обнаружить, что устройство не укладывается на плоскую поверхность и соответствующим образом регулирует опорные точки акселерометра/гироскопа.Есть ли способ изменить ссылку акселерометра на устройстве iOS

ответ

0

Вы можете сохранить копию Attitude во время запуска и использовать его в дальнейшем в качестве эталона для расчета движения:

class MotionManagerSingleton { 

    let motionManager = CMMotionManager() 
    var referenceAttitude: CMAttitude? 

    override init() { 
     motionManager = CMMotionManager() 
     motionManager.deviceMotionUpdateInterval = 0.25 
     motionManager.startDeviceMotionUpdates() 
     calibrate() 
    } 

    func calibrate() { 
     referenceAttitude = motionManager.deviceMotion?.attitude.copy() as? CMAttitude 
    } 

    func getMotionVector() -> CGVector { 
     // Motion 
     let attitude = motionManager.deviceMotion?.attitude; 

     // Use start orientation to calibrate 
     attitude!.multiplyByInverseOfAttitude(sharedInstance.referenceAttitude!) 

     return CGVector(dx: attitude!.pitch, dy: attitude!.roll) 
    } 
} 
+0

Ваша функция калибровать вызывает сбой, потому что 'motionManager.deviceMotion .attitude' равна нулю а затем, когда я вызываю getMotionVector, он принудительно распаковывает значение nil здесь 'sharedInstance.referenceAttitude!' –

+0

Извините, это было всего лишь подмножество всего материала. Я написал сообщение в блоге об этом некоторое время назад: http://developerplayground.net/?p=19 – Stefan

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