2017-02-02 15 views
3

私のアプリはCoreMotionを使用して、デバイスが傾いたときにプレーヤーを動かすことができます。それはSwift 2で完全に機能しましたが、Swift 3に更新した時点で機能しなくなりました。私は加速度計のアップデートを受けていません。CoreMotionの加速度計がSwiftで動作しない3

override func didMove(to view: SKView) { 
    manager.startAccelerometerUpdates() 
    manager.accelerometerUpdateInterval = 0.1 
    manager.startAccelerometerUpdates(to: OperationQueue.main){ (data, Error) in 
     if let accelerometerData = self.manager.accelerometerData { 
      self.physicsWorld.gravity = CGVector(dx: accelerometerData.acceleration.y * 10, dy: accelerometerData.acceleration.x * 10) 
     } 
    } 
} 
+0

あなたは言った: "それは動作を停止しました"。私はそれがコンパイルされて正常に動作することを意味するとしか思えませんが、ハンドラは決して呼び出されません。そうですか? – Coder256

答えて

2

NSErrorをので、あなたのError変数キャメルケース(あなたの状況では小文字)を作ってください、スウィフト3にErrorに改名されました。とにかく、それは変数なので、camelCaseであったはずです。ここで

は、固定されたことや、他のマイナーなエラーが発生した機能の新しいバージョン(NOTEは、XとYを交換ABOUT MY COMMENT)です:

override func didMove(to view: SKView) { 
    manager.accelerometerUpdateInterval = 0.1 
    manager.startAccelerometerUpdates(to: OperationQueue.main) { data, _ in 
     if let accelerometerData = data { 
      // IMPORTANT: Are you intentionally swapping x and y here? -----------> ↓ 
      self.physicsWorld.gravity = CGVector(dx: accelerometerData.acceleration.y * 10, 
               dy: accelerometerData.acceleration.x * 10) 
     } 
    } 
} 

そしてここでは、名前を変更しただけの変数を持つ本来の機能であります(注:ここではいくつかのプログラムミスがありますが、私はそれを使用することはお勧めしません):

override func didMove(to view: SKView) { 

    manager.startAccelerometerUpdates() 
    manager.accelerometerUpdateInterval = 0.1 
    manager.startAccelerometerUpdates(to: OperationQueue.main) { (data, error) in 

     if let accelerometerData = self.manager.accelerometerData { 
      self.physicsWorld.gravity = CGVector(dx: accelerometerData.acceleration.y * 10, dy: accelerometerData.acceleration.x * 10) 
     } 

    } 
} 

はEDIT:あなたは加速度センサーの更新が供給のためにあなたのOperationQueueとしてメインキューを使用しないでください。 Apple's documentationを参照してください。

+0

私はあなたのソリューションを使用しようとしましたが、加速度計はまだ呼び出されません。ログにメッセージがあります。 "実際のプリコミットハンドラに入っていれば、CA制限"これが問題なのかどうかは分かりません。 – Euan

+0

ハンドラが呼び出されていないことは確かですか? 'if let accelerometerData ...'行の後に 'print("加速度計データを取得:\(accelerometerData) ")'を入れてみてください。また、どのバージョンのコードを使用していますか? – Coder256

+0

ハンドラが呼び出されていないことを確信しています。ログには、実際のプリコミットハンドラに入っていれば '[App]のみ表示されます。あなたは上記のように提案しました – Euan

関連する問題