CALayer с анимацией вращения - PullRequest
11 голосов
/ 14 июля 2011

Я замаскировал изображение следующим образом:

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;

Это работает нормально, но главная проблема в том, хочу ли я вращать свой Ipad, анимацию вращения вида или слоя (яне очень уверен) не работает.Вращается без анимации.Не могли бы вы помочь, пожалуйста?

Ответы [ 3 ]

16 голосов
/ 15 июля 2011

Чтобы повернуть 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 должно быть в радианах. Используйте отрицательные значения для вращения против часовой стрелки и положительные значения для часовой стрелки.

0 голосов
/ 14 апреля 2017
        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"];
0 голосов
/ 15 июля 2011

используйте CA3Daffinetransform для вращения

...