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.

27
demandé sur Kristina Brooks 2010-07-29 15:56:39

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.

13
répondu Rab 2010-07-29 12:10:26

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.

44
répondu Jonathan Grynspan 2018-02-10 04:59:28

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).

8
répondu SteamTrout 2014-11-13 15:15:03

Pour faire pivoter de 90' droite:

myView.transform = CGAffineTransformMakeRotation(M_PI_2);
3
répondu Chris 2013-09-20 21:30:27

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.)

1
répondu Duncan C 2013-03-06 11:26:57