CALayer с анимацией вращения
Я замаскировал изображение следующим образом:
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, анимация вращения представления или слоя (я не очень уверен) не работает. Он вращается без анимации. Не могли бы вы помочь?
Ответы
Ответ 1
Чтобы повернуть 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
должен находиться в радианах. Используйте отрицательные значения для вращения против часовой стрелки и положительные значения по часовой стрелке.
Ответ 2
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"];
Ответ 3
использовать CA3Daffinetransform для поворота