私はCATransform3D変換を使用して、擬似3Dパースペクティブエフェクトをビューに適用しています。既に変換されたCALayerのサブレイヤに逆CATransform3Dを適用する
iPhone 4のジャイロスコープを使用して、トランスフォームのパラメータを制御しています。
結果はこのようなものです::
私の次のタスクがあることからサブビューを防ぐために、どちらかである
私は変換だビューは、いくつかのサブビューを持ちますサブビューが影響を受けないように逆変換を適用することができます。
私の目的は、各サブビューをスーパービューに対して垂直にして、それらが「立っている」という印象を与えることです。
I変換のために使用しているコード:
- (void)update:(NSTimer *)timer
{
roll = [[[_manager deviceMotion] attitude] roll];
pitch = [[[_manager deviceMotion] attitude] pitch];
yaw = [[[_manager deviceMotion] attitude] yaw];
CALayer *layer = [self.view layer];
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, -90 * M_PI/180.0f, 0.0f, 0.0f, 1.0f); // make landscape again
rotationAndPerspectiveTransform.m34 = 1.0/-500; // apply the perspective
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, roll, 1.0f, 0.0f, 0.0f);
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, yaw, 0.0f, 0.0f, 1.0f);
[layer setTransform:rotationAndPerspectiveTransform];
}
Iは、Y軸周りサブビューに90度の視点回転を適用することにより、変換を反転しようとして、次のコードを試みました。
for (UIView *subview in [self.view subviews])
{
CALayer *sublayer = [subview layer];
//CATransform3D inverseTransformation = [sublayer transform];
CATransform3D inverseTransformation = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0/-500; // apply perspective
inverseTransformation = CATransform3DRotate(inverseTransformation, 90 * M_PI/180.0f, 0.0f, 1.0f, 0.0f);
[sublayer setTransform:inverseTransformation];
}
しかし、すべてこれが成功すると、サブビューが消えるようになります。 [sublayer transform]
のレイヤーから既存のトランスフォームを使用して3D回転を適用しようとすると、サブビューはちらつきますが回転はしません。
私は行列の数学の知識はあまり良くありませんので、これが正しいアプローチであるかどうかはわかりません。
サブビューをスーパービューと垂直にするにはどうしたらよいですか?