CALayer with rotation animation

13,918

To rotate a CALayer:

NSNumber *rotationAtStart = [myLayer valueForKeyPath:@"transform.rotation"];
CATransform3D myRotationTransform = CATransform3DRotate(myLayer.transform, myRotationAngle, 0.0, 0.0, 1.0);
myLayer.transform = myRotationTransform;        
CABasicAnimation *myAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
myAnimation.duration = kMyAnimationDuration;
myAnimation.fromValue = rotationAtStart;
myAnimation.toValue = [NSNumber numberWithFloat:([rotationAtStart floatValue] + myRotationAngle)];
[myLayer addAnimation:myAnimation forKey:@"transform.rotation"];

myRotationAngle should be in radians. Use negative values for counter-clockwise rotation and positive values for clockwise.

Share:
13,918

Related videos on Youtube

Alex
Author by

Alex

Updated on June 07, 2022

Comments

  • Alex
    Alex almost 2 years

    I have masked an image like this:

    UIView *maskImage; maskImage = [[UIView alloc] init];
    maskImage.backgroundColor = UIColorFromRGB(FTRMaskColor);
    maskImage.frame = newFrame;
    
    CALayer *theLayer = [CALayer layer];
    theLayer.contents = (id)[[UIImage imageNamed:@"image.png"] CGImage];
    theLayer.frame = newFrame;
    
    maskImage.layer.mask = theLayer;
    

    It works fine but the main problem is if I want to rotate the my Ipad, the rotation animation of the view or the layer (I'm not very sure) doesn't work. It rotates without animation. Could you help, please?