質問

ViewController内に一連の画像があります。

私は彼らの個々のレイヤーを変換することによってそれらを「浮かんでいます」:

img.layer.transform = CATransform3DMakeTranslation(0.0f, 0.0f, myZ);

これにより、レイヤーを画面上に浮かぶ効果が得られます。シミュレータでは、目に見える効果がありません(正しい)。

私がやりたいのは、デバイスを左/右/前方に移動すると、レイヤーが浮かんでいるように微妙に見えるようにするという効果があることです。デバイスを左に傾けると、ビュー全体を右に角度を付けます。これにより、デバイスを移動するとコーナーの周りを見ることができます。つまり、画像が実際に画面の上に浮かんでいると感じます。

私はテストプロジェクトを作成しました(ここでプロジェクトファイル)これをデモするサンプルプロジェクトがあります。

私の問題は、私が数学の人ではないということですので、微妙な浮遊効果をシミュレートする最良の方法に苦労しています。今、私はDevicemotionのリスナーを持っています。

self.view.layer.sublayerTransform = CATransform3DMakeRotation(20.0f * M_PI / 180.0f, 2*motion.attitude.pitch, -2*motion.attitude.roll, 0);

これは私が望むものに非常に近いですが、それは正確ではありません。

この効果は、さまざまなアプリケーションで使用できるものになると思います。私はこれを友人の何かに拡張したいと思っています。私は顔の検出で取り組んでいます(したがって、人の顔の動きに基づいて親のビューを動かします - 電話/デバイスを完全に静止させても)。

「OpenGLを使用するだけ」と答えてもらうことができます。これは私が必要とする答えではありません - このプロジェクトに統合する方法を示すコードのチャンクを投稿しない限り。 (私は解決すべき新しい問題を探していません。:-)

繰り返しますが、完全なプロジェクトはここにあります(iPhoneフローティングビュー)今のように効果を見たい人のために。 (これが機能しているとき、私は後世のためにここにリンクされている完全な(動作)プロジェクトを残します。)

役に立ちましたか?

解決

私はこれを持っていると思います!これを使って:

    [appDelegate.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue]
                                                   withHandler:
     ^(CMDeviceMotion *motion, NSError *error) {

         CATransform3D transform;
         transform = CATransform3DMakeRotation(motion.attitude.pitch, 1, 0, 0);
         transform = CATransform3DRotate(transform, motion.attitude.roll, 0, 1, 0);

         self.view.layer.sublayerTransform = transform;
     }];

軸をひっくり返したい場合は、それらの1の前にマイナスサインを追加するだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top