2012-04-27 11 views
2

私は変換する必要があるレイヤーを持っています。現在、私は次のように使用しています:CATransform3DRotate flip horizo​​ntal

self.customLayer.transform = CATransform3DRotate(CATransform3DIdentity,M_PI/2.0f, 0, 0, 1); 

をこれは正しくレイヤ右サイドアップになりますが、それは間違った方法であるので、それはまた、水平方向に反転する必要があります。これを行うにはどうすればCATransform3DRotateを調整できますか?あなたが必要となります

+0

、あなたが希望する結果に手を持っているより多くの現在の結果を説明できますか? – sch

+0

それはちょうど水平に反転する必要があります、それを説明する方法を他にはありません! –

答えて

9

self.customLayer.transform = CATransform3DScale(CATransform3DMakeRotation(M_PI/2.0f, 0, 0, 1), 
               -1, 1, 1); 

規模-1には、フリップです。画像を水平方向に押しつぶし、ゼロを超えたとします。

+0

それは私に次のエラーを与えています:互換性のない型 'CATransform3D'のパラメータに 'int'を渡して警告:C99で関数の暗黙の宣言CATransform3DMakeRotateが無効です。 –

+1

@NicHubbard - 'CATransform3DMakeRotation'ではなく' CATransform3DMakeRotation'でなければなりません。 +1 – sch

+0

うーん、今、それは逆さまです.... –

4

私は個人的には、これらのことにKVCを使用する方が良いとわかりました。あなたは(CATransform3DMakeRotation内の任意のベクトル値を提供してはならない、あなたが水平に反転したい場合は、パラメータは、ここで

CATransform3DScale (CATransform3D t, CGFloat sx, CGFloat sy, CGFloat sz) 

ですので

// Rotate the layer 90 degrees to the left 
[self.customLayer setValue:@-1.5707 forKeyPath:@"transform.rotation"]; 
// Flip the layer horizontally 
[self.customLayer setValue:@-1 forKeyPath:@"transform.scale.x"]; 
3

:あなたはおそらく同じ効果を達成するために、次のようなものを使用することができます)。代わりに、x軸のスケールを制御するだけです。

あなたはそれを水平方向にする必要がありひっくり返すことによって:

self.transform = CATransform3DScale(CATransform3DMakeRotation(0, 0, 0, 0), 
             -1, 1, 1); 

あなたが戻って原点にそれを反転したい場合、あなたは:

self.transform = CATransform3DScale(CATransform3DMakeRotation(0, 0, 0, 0), 
             1, 1, 1); 

追加:
を短いバージョンはあなたに1つの操作が保存されます。反転するには:

self.transform = CATransform3DMakeRotation(M_PI, 0, 1, 0); 

が正常に戻って反転するには:

self.transform = CATransform3DMakeRotation(0, 0, 1, 0); 
関連する問題