変換する必要のあるレイヤーがあります。現在、私は以下を使用しています:
self.customLayer.transform = CATransform3DRotate(CATransform3DIdentity,M_PI / 2.0f, 0, 0, 1);
これにより、レイヤーが正しく表向きになりますが、間違った方法であるため、水平方向に反転する必要もあります。これを行うためにどのように調整できCATransform3DRotate
ますか?
変換する必要のあるレイヤーがあります。現在、私は以下を使用しています:
self.customLayer.transform = CATransform3DRotate(CATransform3DIdentity,M_PI / 2.0f, 0, 0, 1);
これにより、レイヤーが正しく表向きになりますが、間違った方法であるため、水平方向に反転する必要もあります。これを行うためにどのように調整できCATransform3DRotate
ますか?
あなたは必要になるでしょう:
self.customLayer.transform = CATransform3DScale(CATransform3DMakeRotation(M_PI / 2.0f, 0, 0, 1),
-1, 1, 1);
-1のスケールはフリップです。画像を水平方向に押しつぶしていて、ゼロを超えたと想像してください。
ここのパラメータは
CATransform3DScale (CATransform3D t, CGFloat sx, CGFloat sy, CGFloat sz)
水平方向に反転する場合は、CATransform3DMakeRotation()でベクトル値を指定しないでください。代わりに、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);
個人的には、これらのことにKVCを使用する方が読みやすいと思います。同じ効果を得るには、おそらく次のようなものを使用できます。
// 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"];