CATransform3DRotate水平翻转

时间:2012-04-27 22:06:52

标签: objective-c ios calayer catransform3d

我有一个我需要转换的图层。目前我正在使用以下内容:

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

这正确地使图层正面朝上,但它也需要水平翻转,因为它是错误的方式。如何调整CATransform3DRotate来执行此操作?

3 个答案:

答案 0 :(得分:9)

你需要:

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

带-1的刻度是翻转。想象一下,你正在水平挤压图像并且你已经过零了。

答案 1 :(得分: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"];

答案 2 :(得分:4)

由于这里的参数是

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);  

增加:
较短的版本将为您节省一次操作。翻转:

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

要恢复正常:

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