我有一个需要转换的层。目前我正在使用以下内容:
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);
另外:
较短的版本将为您节省一项操作。反转:
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"];