2016-09-21 7 views
10

CoreMotionフレームワークを使用してデバイスの向きを変えることで、オブジェクトの動作が落ちるという2つの方法があります。私は両方のバージョンをコードで試してみたところ、どちらも期待通りに動作しているように見えました。つまり、デバイスの向きに関係なく地球に向かって落ちています。デバイスの向きに関係なく、地球に向かって落ちてくるオブジェクト

最初のバージョンでは、x方向とy方向の加速度(とdy)が横向きに切り替わっても、両方のバージョンが同じように動作するのは不思議です。

1)

if var dx = data?.acceleration.x, var dy = data?.acceleration.y { 
          switch UIDevice.currentDevice().orientation { 
          case .Portrait: 
           dy = -dy 
          case .PortraitUpsideDown: 
           break 
          case .LandscapeRight: 
           swap(&dx, &dy) 
          case .LandscapeLeft: 
           swap(&dx, &dy) 
           dy = -dy 
          default: 
           dx = 0 
           dy = 0 
          } 
          gravity.gravityDirection = CGVector(dx: dx, dy: dy) 
         } 

2)

if var dx = data?.acceleration.x, var dy = data?.acceleration.y { 
           switch UIDevice.currentDevice().orientation { 
           case .Portrait: 
            dy = -dy 
           case .PortraitUpsideDown: 
            break 
           case .LandscapeRight: 
            break 
           case .LandscapeLeft: 
            break 
           default: 
            dx = 0 
            dy = 0 
           } 
           gravity.gravityDirection = CGVector(dx: dx, dy: dy) 
          } 
+0

向きを.LandscapeRightまたは.LandscapeLeftにするには、デバイスをどのように配置しますか? – JohnH

答えて

1

私はあなたのシミュレータを使用していると思いますので、重力は常に下に直交しています。

実際のデバイスの動作は、デバイスを少なくともわずかに傾けるので、動作が異なります。

1

1.)正しく保存されたファイルが実行されているかどうかを確認してください。 2)これは、スイッチケースブロックがPotraitPotraitUpsideDown、LandscapeLeftとLandscapeRight表現にアクセスすることができない場合であるかもしれません。その後、デフォルトになる可能性があります。その定義を確認してください。その後重力にのみアクセスします。

関連する問題