翻訳と回転を同時に行うCALayerがあります。私は実際に動作することができ、次のコードがあります。CATransform3Dを使ってCALayerを回転させて翻訳するにはどうすればいいですか
// layer 1:
// translate: (△x, △y, △z) = (length/2, 0, length/2)
// rotate around y: 90 degree
CATransform3D transformLayer1 = CATransform3DIdentity;
transformLayer1 = CATransform3DTranslate(transformLayer1, length/2, 0, length/2 );
transformLayer1 = CATransform3DRotate(transformLayer1, M_PI_2, 0, 1, 0);
self.layer1.transform = transformLayer1;
を私のテスト中に、私は、たとえば、コードは次のように変更され、平行移動と回転の順序を変更した場合、変換結果は異なるものになります見つけます:
デバッグにおいてCATransform3D transformLayer1 = CATransform3DIdentity;
// do rotation firstly, and then translation
transformLayer1 = CATransform3DRotate(transformLayer1, M_PI_2, 0, 1, 0);
transformLayer1 = CATransform3DTranslate(transformLayer1, length/2, 0, length/2 );
self.layer1.transform = transformLayer1;
、Iは各ステップにおける変換行列の値を出力します。結果は、m43の値が異なることを示しています。なぜこれが起こったのか説明できる人はいますか?またはCATransform3DTranslate()とCATransform3DRotate()のCore Animation機能を理解する方法は?
ありがとうございました。私は、ヘッダーファイルからCatransform3DRotateのコメントをチェックしました。実際には、行列の乗算に基づいて回転(角度、x、y、z)* tを返すことを示しています。私はaswerとしてこれをマークします:) –