2011-07-14 14 views
11

que haber enmascarado una imagen como esta:CALayer con la animación de rotación

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; 

Funciona bien, pero el principal problema es que si quiero girar el mi Ipad, la animación de rotación de la vista o la capa (I no estoy muy seguro) no funciona. Gira sin animación. ¿Podrías ayudarme, por favor?

+0

Basta con aplicar la animación de rotación - [Cómo hacer una animación Girar] (http://stackoverflow.com/questions/6075696/how-to-make-a-rotate-animation) – beryllium

Respuesta

16

Para girar una 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 debe estar en radianes. Use valores negativos para la rotación en sentido antihorario y valores positivos para el sentido horario.

+1

que puede añadir un rotar la animación a mi CALayer pero el problema principal es que CALayer no gira durante la rotación de mi iPad – Alex

+0

De hecho, esto no responde a la pregunta, pero apareció en los resultados de búsqueda y respondió * mi * pregunta, por lo que +1 a "Esta respuesta es útil" :)) –

0
 CAKeyframeAnimation *rotation = [CAKeyframeAnimation animation]; 
     rotation.keyPath = @"transform.rotation"; 
     rotation.values = @[ @0.14, @0,@0.2 ,@0]; 
     rotation.timingFunctions = @[ 
            [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 
            [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 
            [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 
            [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut] 
            ]; 
     rotation.fillMode   = kCAFillModeForwards; 
     rotation.removedOnCompletion = NO; 
     rotation.beginTime = AVCoreAnimationBeginTimeAtZero; 
     [imageLayer addAnimation:rotation forKey:@"rotation"]; 
Cuestiones relacionadas