問題タブ [catransform3d]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - 弾丸物理クォータニオンから角度に変換して、CATransform3DMakeRotationで使用します
CATransformLayerを使用して6面の3Dダイスを作成しました。これをコンテナレイヤーとして使用して、6つの変換されたレイヤーを空間内で回転できる3Dオブジェクトにグリップします。ここからアイデアを得ました。それはうまく機能しており、最上層でCATransform3DMakeRotationを呼び出す「サイコロ」を回転させることができます。サイコロは回転してうまく機能します。
次のステップは、プログラムに「弾丸物理学」を挿入することでした。私はそれを機能させていますが、物理学の世界のサイコロの「弾丸物理学の「クォータニオン」方向」から、コンテナのCALayerメソッドに渡すことができる回転角に変換する方法がわからないために行き詰まっています。
これが私がしていることです:
1)「弾丸物理学」を呼び出して、サイコロの向きを取得します。
2)クォータニオンをオイラーに変換します(答えをグーグルで検索すると、以下にコピーされたメソッドが見つかりました)qW = quatO.getW(); qX = quatO.getX(); qY = quatO.getY(); qZ = quatO.getZ(); [自己quaternionToEuler];
3)新しいオイラー角をCALayerに適用します(sCtrl)
注1:これは私のcalayerを回転させるために使用している方法です
注2:これは、クォータニオンをオイラーに変換するために私が見つけた方法です。
要約すると、私の目的は、CALayer(OpenGLではない)を使用して、プログラムで「弾丸の物理」BOX(サイコロ)を表すことです。そのために、CATransformLayerを6つの変換されたレイヤーのコンテナーとして3Dオブジェクトに使用しています。
-私が今得ている結果は良くありません、グラフィカルなサイコロは回転しますが、明らかに間違っています...だから私はここで完全に間違ったことをしています...
質問:弾丸物理学の世界でBOXの「向きまたは回転」を取得できるとすると、返されたクォータニオンをCATransform3DMakeRotationで使用できるもの(角度)に変換するにはどうすればよいですか。
よろしくお願いします、
ルイス
xcode - UIView 上下反転
おそらくダミーの質問であることはわかっていますが、質問する必要があります。UIView
垂直方向に反転するにはどうすればよいですか? 私はアニメーションを求めているわけではありませんが、ただ反転させてください。
私は垂直反転を行うことができますUILabel
:
label1.layer.transform = CATransform3DMakeRotation(M_PI, 1.0f, 0.0f, 0.0f);
次の方法で元に戻します。
しかし、ビューに対してそれを行っているとき:
半分しか回転しないと思います... それで、何かアイデアはありますか?
みんなありがとう。
iphone - RETINA でのみ CATransform3D を使用した UIView がぼやける
UILabel を含む UIView を表示していますが、これらの行のコードに到達するとすぐに、このビューとラベルがぼやけます:
アプリ全体で CA3DRotations やその他のものを使用していますが、これは以前にはありませんでした。また、ビューのフレームとラベルを整数のみを使用して設定しました! したがって、それはハーフピクセルの問題などではありません。それがほとんどのぼやけた問題を引き起こすことはわかっていますが、私のものではありません!
シミュレーターではブレず、iPadでもブレず、iPhone3GSでもブレず。Retina ディスプレイの iPhone4 でのみぼやけます。3D 回転を行う前でも! 私が気が狂う前に、誰も手がかりを持っていますか?
objective-c - 3D Transform を使用した Retina ディスプレイ上のコア グラフィックス
だから、私は難しい質問をしているように見えますが、ここでもう一度言います。
奇妙な問題のように見えるものがあります。一部のビューでは、上部のツールバーを x 軸に沿って 90 度回転させて非表示にしています。次に、ユーザーがそれらを「プルダウン」できるようにします。これにより、ビューが 0 度に回転し、ツールバーが表示されます。プルダウンするツールバーが 2 つある 1 つのビューを除いて、すべてうまく機能します。これは、最初のツールバーを下に回転させ、次に 2 番目のツールバーを下に回転させ、最初のツールバーを 2 番目のツールバーの高さだけ下に移動させることによって機能します。これらはすべて、非 Retina ディスプレイで正常に機能します。ただし、Retina ディスプレイでは、最初のツールバーのディスプレイスメントは本来あるべきものの半分にすぎません。さらに、ビューのフレームはまさにあるべきものです。つまり、(NSLog) をチェックすると、次のフレーム{0, 30, 320, 30}
が表示されますが、実際の画像はフレームに表示されます。{0, 15, 320, 30}
. ずらしたのは背景だけです。ビューがあるはずのスペースをクリックすると、タッチイベントが通過します。
これは、Retina スクリーンで起こっていることです。
Retina 以外の画面では次のようになります (まったく同じコード)。
これは、ビューを回転させるために使用するコードです (非常に単純です):
繰り返しますが、これは Retina ディスプレイでのみ発生します。
現在、ツールバーは Core Graphics でレンダリングされています。そこで、drawRect からコードを完全に削除して、問題の原因となっている CG コードを排除し、draw rect にコードがまったくないようにしました。問題はまだ発生します。また、drawRect を使用しない (メソッド全体をコメントアウトする) と、回転は正しく行われますが、すべてのサブビュー (コア グラフィックスも使用する) が 1/2 の解像度でレンダリングされるため、すべてがぼやけて見えることにも注意してください。
変換と関係があると思いますが、その方法や理由はわかりません。回転を 0 ラジアンに戻した後にレイヤー変換を ID に設定すると (完全に表示されるようになります)、ビューは正しい位置にスナップされます。また、0 ラジアンでは、変換が完全に同一ではないことにも注意しました。m34 (遠近法) はまだ設定されています。ゼロに戻すと問題は解決します。ただし、ビューが 0 rad 以外の他の回転にある間は、ゼロに設定しても問題は解決しません。原点 {0,0} から下に回転していないビューは、まだシフトされています。すべての変換を確認して確認しましたが、問題は 3D 変換中に発生するようです。
アップデート
@Joshua Weinbergの回答により、レイヤーのrasterizationScaleをいじり始めました。私が発見したのは、下にある画像のオフセットが 1/rasterizationScale だけずれていたことです。したがって、rasterizationScale を 6 に設定し、ビューを 30 だけ下に移動すると、背景画像は 30/6 (5.0f) だけ下に移動します。
更新 2
画像を下に翻訳するハックを試みました。画像が適切な量だけ下に移動するという点で機能しますが、画像が消えることもあります。したがって、私のローテーションメソッドのこのコード:
これをもたらします:
iphone - CATransform3D 奇妙な UIScrollView contentOffset
UIScrollview が scrollViewDidScroll デリゲート メソッドでスクロールしている間に、クールな CA3DTransform を実行しています。指を使ってスクロールすると完璧に機能するので、手動でスクロールするときはすべて完璧です。
しかし、プログラムで scrollview contentoffset を設定すると、次のようになります。
それは引き続きデリゲート メソッド scrollviewdidscroll を呼び出すため、同じアニメーション メソッドが呼び出されるため、正しいアニメーションが表示されますが、何らかの理由でビューの一部がアニメーション中およびアニメーション後に失われます。すべてのものにlayer.zPositionを設定しようとしましたが、役に立たないようです。ビューの一部が失われることなく手動でスクロールしても問題ないはずです...どういうわけか、このメソッドをプログラムで呼び出す方法が異なり、その理由がわかりません!
iphone - 2つのUIImageViewをX方向に回転させる
2つの画像を回転させたいのですが、一方の画像をもう一方の画像の後ろに配置しますが、次のコードで画像を回転すると、背面の画像が前面の画像の上になり、ZPOを割り当てますが、変更はありません
回転する前の私のビューのこのリンクhttp://i39.tinypic.com/ivv2ah.png
回転した後http://i43.tinypic.com/ic05xj.png
これがどのように起こるか
CArdImageはカスタムUIImageViewであり、これは私が変更するものです
iphone - 3D アニメーション - ビュー間にギャップを与える CABasicAnimation および CATransform3D
だから、私は 最初のビューにあるこのアプリhttp://itunes.apple.com/us/app/spg-mobile-app/id312306003?mt=8にあるアニメーションを実装しようとしています
ビューを反転するためのアニメーションを実装しましたが、片側をアニメーション化することに成功し、逆反転の逆ロジックを指定すると、ビュー間にギャップが生じます
ここに私のコードがあります
だから、ここで私は最初に実行メソッドを呼び出しています。ここに私の合計コードをアップロードしました
このコードは私にとっては少しうまくいきましたが、まだいくつかのギャップがあります。問題は、進行中のビューと次のビューのフレームが同じである必要があることです
ios - CATransform3D 透視変換の消失点の設定
CATransform3D 変換を使用して遠近効果を作成するときに消失点座標を定義する方法を知っている人はいますか? 画像を回転させ、その結果の遠近効果が追加されるのを確認するコードを作成しましたが、消失点がどこにあるかを指定できるようにする必要があり、これは変更できないデフォルト パラメータのようです。私は広範囲に検索しましたが、おそらくこれは不可能であるという結論に達しており、代わりに OpenGL を調べる必要があります。どんな助けにも感謝します。乾杯。
ios - サブビューとしてラベルを使用したCATransform3D回転
CATransform3Dについて1つの問題があります。
ラベルBを含むビューAがあります。Bのレイヤー位置はAの中心です。Bは通知メッセージを表示するために使用されます。Aを180度回転させたいのですが、もちろんBのテキストは上下逆になります。だから私もBを180度回転させなければなりません。すべてが単純に見え、実際にはシミュレーターでは正常に機能します。
しかし、デバイスにロードすると、AとBは回転しましたが、Bの位置が変更されました。今、私はBの半分しか見ることができず、残りの半分はAから出ています。
私の推測では、Aを回転させると、Bは180度反転したAの座標系に関連しているため、Bの位置が変更されます。
しかし、誰かがこの問題を解決する方法を知っているかどうか、またはあなたたちがより良いアプローチ方法を持っているかどうかを知りたいです。
どうもありがとうございます。
アップデート
なぜBの位置がずれているのかはまだわかりませんが、同じアニメーションを実装する別の方法を思いつきました。少し注意が必要です。
重要なのはanimation.autoreverse
、Piでラベルのスーパービューを回転させると、ラベルのテキストが上下逆に回転することです。つまり、私が行ったのは、スーパービューをPi / 2で回転させ、同じ期間と設定を維持することでしたautoreverse = YES
。これにより、スーパービューがPi / 2で回転し、次に回転して初期状態に戻ります。その結果、ビューはまったく回転していませんが、ユーザーの視界では回転しています。
objective-c - CATransform3DRotateフリップ水平
変換する必要のあるレイヤーがあります。現在、私は以下を使用しています:
これにより、レイヤーが正しく表向きになりますが、間違った方法であるため、水平方向に反転する必要もあります。これを行うためにどのように調整できCATransform3DRotate
ますか?