CATransform3DRotate flip horizontal

Tengo una capa que necesito transformar. Actualmente estoy usando lo siguiente:

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

Esto correctamente hace que la capa esté hacia arriba, pero también se debe voltear horizontalmente, ya que es la forma incorrecta. ¿Cómo puedo ajustar CATransform3DRotate para hacer esto?

Necesitarás:

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

Una escala con -1 es una vuelta. Imagine que está aplastando la image horizontalmente y pasa a cero.

Personalmente, me parece más fácil de leer usar KVC para estas cosas. Probablemente podría usar algo como lo siguiente para lograr el mismo efecto:

 // 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"]; 

Como el parámetro aquí es

 CATransform3DScale (CATransform3D t, CGFloat sx, CGFloat sy, CGFloat sz) 

Si desea voltear horizontalmente, no debe proporcionar ningún valor de vector en CATransform3DMakeRotation (). En cambio, quiere simplemente controlar la escala del eje x.

Al voltearlo horizontalmente, deberías:

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

Si desea devolverlo al origen, haga lo siguiente:

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

Adición:
Una versión más corta le ahorrará una operación. Voltear:

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

Para volver a la normalidad:

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