ViewController 内に一連の画像があります。
個々のレイヤーを変換して「フローティング」しています。
img.layer.transform = CATransform3DMakeTranslation(0.0f, 0.0f, myZ);
これにより、レイヤーを画面上に浮かせる効果が得られます。シミュレーターでは、目に見える効果はありません (これは正しいです)。
私がやりたいことは、デバイスを左/右/前方/または後方に移動すると、レイヤーが浮いているように微妙に見えるようにすることです。デバイスを左に傾けると、ビュー全体が右に傾くはずです。これにより、デバイスを動かすと隅々まで見えるようになります。つまり、画像が異なる速度で移動するため (Z インデックスに基づいて)、画像が実際に画面上に浮いているように感じられます。
これをデモするサンプルプロジェクトを含むテストプロジェクト(プロジェクトファイルはこちら)を作成しました。
私の問題は、私が数学者ではないことです。そのため、微妙な浮遊効果をシミュレートする最善の方法に苦労しています。今、私は DeviceMotion のリスナーを持っています。
self.view.layer.sublayerTransform = CATransform3DMakeRotation(20.0f * M_PI / 180.0f, 2*motion.attitude.pitch, -2*motion.attitude.roll, 0);
これは私が望むものに非常に近いですが、正確ではありません。
この効果は、さまざまなアプリケーションで使用できるものになると思います。私はこれを友人に拡張することを望んでおり、顔検出に取り組んでいます(電話/デバイスを完全に静止させている間でも、人の顔の動きに基づいて親ビューを移動します)。
「OpenGLを使用するだけ」という回答が得られることを認識しています。それは私が必要とする答えではありません-このプロジェクトに統合する方法を示すコードのチャンクを投稿しない限り。(解決すべき新しい問題を探しているわけではありません。:-)
繰り返しになりますが、現在の効果を確認したい人のために、完全なプロジェクトがここにあります ( iphone フローティング ビュー)。(これが機能するようになったら、後世のためにここにリンクされた完全な (機能する) プロジェクトを残しておきます。)