Tourner un CALayer à 90 degrés?
Comment faire tourner un CALayer 90 degrés? J'ai besoin de tourner tout inclure les sous-couches et le système de coordonnées.
5 réponses
Si je suis l'anime je utiliser quelque chose comme cela dans mes applications:
- (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;
}
bien sûr, vous pouvez l'utiliser n'importe où, n';t ont à retourner à partir d'une méthode si ce n';t en fonction de vos besoins.
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)
c'est-à-dire, transformer la couche de telle sorte qu'elle soit tournée de 90 degrés (π / 2 radians), avec 100% de cette rotation ayant lieu autour de l'axe Z.
Fondamentalement, quelque chose comme ça:
CGAffineTransform rotateTransform = CGAffineTransformMakeRotation(M_PI / 2.0);
[myCALayer setAffineTransform:rotateTransform];
EDIT: il tourne dans le sens des aiguilles d'une montre ou dans le sens contraire des aiguilles d'une montre selon la plateforme (iOS ou Mac OS).
Pour faire pivoter de 90' droite:
myView.transform = CGAffineTransformMakeRotation(M_PI_2);
Rab a montré comment faire avec un CAAnimation
objet. Sa fait plus simple que cela:
[myView animateWithDuration: 0.25
animations:
^{
myView.transform = CGAffineTransformMakeRotation(M_PI/2);
}
];
(levage de la transformation de la ligne de réponse de Chris - trop la flemme de le réécrire puisqu'il a déjà le code.)
Chris est le code ferait tourner la vue sans animation. Mon code ci-dessus fera la même chose avec l'animation.
par défaut, les animations utilisent la facilité d'entrée, la facilité de synchronisation. Vous pouvez changer cela avec un peu version plus complexe de l' animateWithDuration
Appel (utilisez animateWithDuration:delay:options:animations:completion:
à la place, et passer dans un timing désiré dans le paramètre options.)