我有一个我需要转换的图层。目前我正在使用以下内容:
self.customLayer.transform = CATransform3DRotate(CATransform3DIdentity,M_PI / 2.0f, 0, 0, 1);
这正确地使图层正面朝上,但它也需要水平翻转,因为它是错误的方式。如何调整CATransform3DRotate
来执行此操作?
答案 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);