¿Cómo giro un CALayer 90 grados? Necesito rotar todo, incluidas las subcapas y el sistema de coordenadas.¿Girando un CALayer 90 grados?
Respuesta
Si estoy animándola utilizo algo como esto en mis aplicaciones:
- (NSObject *) defineZRotation {
// Define rotation on z axis
float degreesVariance = 90;
// object will always take shortest path, so that
// a rotation of less than 180 deg will move clockwise, and more than will move counterclockwise
float radiansToRotate = DegreesToRadians(degreesVariance);
CATransform3D zRotation;
zRotation = CATransform3DMakeRotation(radiansToRotate, 0, 0, 1.0);
// create an animation to hold "zRotation" transform
CABasicAnimation *animateZRotation;
animateZRotation = [CABasicAnimation animationWithKeyPath:@"transform"];
// Assign "zRotation" to animation
animateZRotation.toValue = [NSValue valueWithCATransform3D:zRotation];
// Duration, repeat count, etc
animateZRotation.duration = 1.5;//change this depending on your animation needs
// Here set cumulative, repeatCount, kCAFillMode, and others found in
// the CABasicAnimation Class Reference.
return animateZRotation;
}
Por supuesto se puede usar en cualquier lugar, don; t tiene que volverlo a partir de un método si eso no parece; t traje tus necesidades.
El bit de animación es bastante prolijo. –
Me alegro de que ayude. Suerte con ello. – Rab
No es necesario crear un objeto CAAnimation para rotar una vista. Para eso, animateWithDuration: animaciones funciona bien. Ver mi respuesta para más detalles. –
Básicamente algo así:
CGAffineTransform rotateTransform = CGAffineTransformMakeRotation(M_PI/2.0); [myCALayer setAffineTransform:rotateTransform];
EDIT: Se va a girar en sentido horario o antihorario dependiendo de la plataforma (iOS o Mac OS).
Radianes, no grados. 90.0/180.0 * M_PI, o M_PI/2.0. –
Oh, sí, lo siento, no me di cuenta. – SteamTrout
Obj-C:
theLayer.transform = CATransform3DMakeRotation(90.0/180.0 * M_PI, 0.0, 0.0, 1.0);
Swift:
theLayer.transform = CATransform3DMakeRotation(90.0/180.0 * .pi, 0.0, 0.0, 1.0)
Es decir, transformar la capa de tal manera que se gira 90 grados (pi/2 radianes), con 100% de esa rotación que tiene lugar alrededor del eje z.
M_PI es doble y CATransform3DMakeRotation requiere que el ángulo sea CGFloat, por lo que se debe usar CGFloat (M_PI) en su lugar –
En C, la conversión de doble a CGFloat es implícita (y los moldes en C y Objective-C toman la forma * (T) expresión *, no * T (expresión) *. ¿Estás pensando en Swift o C++?) Moreso, 'M_PI' se multiplica por un' doble' en la instrucción anterior, por lo que se ensancha, derrotando el propósito del elenco. –
Correcto, estaba pensando en Swift, teniendo dificultad para rotar un arco en una trayectoria circular. –
Rab mostró cómo no hacerlo con un objeto CAAnimation
. En realidad es más simple que eso:
[myView animateWithDuration: 0.25
animations:
^{
myView.transform = CGAffineTransformMakeRotation(M_PI/2);
}
];
(el levantamiento de la línea de transformar de de respuesta Chris - demasiado perezoso para volver a escribir, puesto que ya proporciona el código perfecto.)
código de Chris sería girar la vista sin animación Mi código anterior hará lo mismo con la animación.
De forma predeterminada, las animaciones son fáciles de usar, facilitan el tiempo. Puede cambiar eso con una versión un poco más compleja de la llamada animateWithDuration
(Use animateWithDuration:delay:options:animations:completion:
y pase en el tiempo deseado en el parámetro options.)
animateWithDuration: animaciones: es un método basado en bloques para UIView. La pregunta aquí es cómo animar a CALayer: CALayer no tiene este método, o al menos no está documentado que lo tenga. También en 2010, el método animateWithDuration: animations: no existía aún (ni, creo, hizo nada basado en bloques en Obj-C) ... así que esto sería más una "actualización para 2012" si se aplicara. – Rab
también se animará el código de Chris. con la duración estándar de las animaciones CALayer. – vikingosegundo
- 1. Writeablebitmap.SaveJpeg está girando mi imagen -90 grados
- 2. Rotar un mapa de bits 90 grados
- 3. Rotar una matriz bidimensional en 90 grados
- 4. Cómo rotar TextView 90 grados y mostrar
- 5. Zxing - Cambio de la vista de la cámara -90 grados
- 6. Cómo rotar una imagen 90 grados en iOS?
- 7. UIImagePNGR ¿Problemas con la presentación?/Imágenes giradas 90 grados
- 8. Lossless JPEG ¿Girar (90/180/270 grados) en Java?
- 9. ¿Cómo rotar una matriz N x N en 90 grados?
- 10. Girar una sola página 90 grados con iTextSharp/VB en un PDF de varias páginas existente
- 11. El video grabado gira 90 grados después de cargarlo a Internet
- 12. Girando alrededor de un punto arbitrario: HTML5 Canvas
- 13. Java - Dibuje una regla (línea con marcas en un ángulo de 90 grados)
- 14. Android - ¿Hay alguna manera de girar un pan tostado 90 grados?
- 15. "Girar" un IEnumerable <IEnumerable <T>> 90 grados
- 16. Canvas HTML5: ¿Cómo hacer una rueda giratoria de carga girando la imagen en grados?
- 17. Enmascaramiento de un CALayer con otro CALayer
- 18. ¿La manera más fácil de girar 90 grados una imagen usando OpenCV?
- 19. Android get Orientación de una cámara Bitmap? Y gire hacia atrás -90 grados
- 20. Cómo rotar las etiquetas del eje x 90 grados en el diagrama de nivel
- 21. imagen presionada desde el iPhone en el modo vertical se gira 90 grados
- 22. ¿Cómo rotar una matriz 90 grados sin usar ningún espacio extra?
- 23. ¿Cómo activar una función cuando el iPhone se gira 90 grados?
- 24. ¿Cómo rotar la imagen mediante programación en 90 grados en iPhone?
- 25. Girando el videobuffer actual en Videoview
- 26. miniatura PIL está girando mi imagen?
- 27. C# rotate bitmap 90 degrees
- 28. CATransform3DRotate rotate para 360 grados
- 29. girando un cuaternión en 1 eje?
- 30. girando solo el texto (no el div) en un elemento div
No olvide establecer el punto de anclaje de capa si es necesario. No se "volteará" de la misma manera si lo coloca en el medio en lugar de la parte superior de la capa – guillaume