3

変換する必要のあるレイヤーがあります。現在、私は以下を使用しています:

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

これにより、レイヤーが正しく表向きになりますが、間違った方法であるため、水平方向に反転する必要もあります。これを行うためにどのように調整できCATransform3DRotateますか?

4

3 に答える 3

11

あなたは必要になるでしょう:

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

-1のスケールはフリップです。画像を水平方向に押しつぶしていて、ゼロを超えたと想像してください。

于 2012-04-27T22:29:12.363 に答える
6

ここのパラメータは

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);
于 2013-07-17T04:50:27.510 に答える
4

個人的には、これらのことに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"];
于 2013-01-04T11:20:36.177 に答える