Я пытаюсь создать довольно простой CoreAnimation для использования в AVComposition
. Моя цель состоит в том, чтобы создать CALayer
, который через различные подслои увеличивает и уменьшает заголовок, а затем постепенно исчезает в изображениях. По сути, слайд-шоу. Это экспортируется в .mov с использованием AVAssetWriter
.
С помощью WWDC 2011 AVEditDemo я смог получить заголовок и изображения. Проблема в том, что они все одновременно отображаются на экране!
Я создал каждый слой с непрозрачностью 0,0. Затем я добавил CABasicAnimation
, чтобы уменьшить их от 0,0 до 1,0, используя следующий код:
CABasicAnimation *fadeInAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeInAnimation.fromValue = [NSNumber numberWithFloat:0.0];
fadeInAnimation.toValue = [NSNumber numberWithFloat:1.0];
fadeInAnimation.additive = NO;
fadeInAnimation.removedOnCompletion = YES;
fadeInAnimation.beginTime = 1.0;
fadeInAnimation.duration = 1.0;
fadeInAnimation.fillMode = kCAFillModeForwards;
[titleLayer addAnimation:fadeInAnimation forKey:nil];
Проблема, похоже, в свойстве beginTime. «1.0» означает задержку, поэтому она начинается через 1 секунду после начала анимации. Однако он сразу появляется на экране. Затухающая анимация
Оборотная сторона этого кода, для постепенного исчезновения, просто изменяет fromValue на 1.0 и toValue на 0.0. Он имеет время начала 4.0 и отлично работает.
Я использую следующее для создания animatedTitleLayer
:
CATextLayer *titleLayer = [CATextLayer layer];
titleLayer.string =self.album.title;
titleLayer.font = @"Helvetica";
titleLayer.fontSize = videoSize.height / 6;
titleLayer.alignmentMode = kCAAlignmentCenter;
titleLayer.bounds = CGRectMake(0, 0, videoSize.width, videoSize.height / 6);
titleLayer.foregroundColor = [[UIColor redColor]CGColor];
titleLayer.opacity = 0.0;
Изображение исчезает в анимации с интервалом beginTime 5 секунд. Как и в названии, их анимация затухания работает нормально.
Любая помощь будет принята с благодарностью!
Ваше здоровье!
ИЗМЕНИТЬ
Все ответы были полезны, но в конечном итоге я обнаружил, что к CALayer
можно добавить только одну анимацию. Анимация исчезновения работала, так как была добавлена последней.
Затем я попробовал CAAnimationGroup, но это не сработало, поскольку я изменял тот же путь значения ключа.
Итак, я понял, что CAKeyframeAnimation
лучше всего подходит для этого. Только вот с этим у меня тоже проблемы! Теперь код постепенно исчезает, но не исчезает. Я пробовал различные fillMode, менял продолжительность и т. Д. Не могу заставить его работать !!
Вот мой код:
CAKeyframeAnimation *fadeInAndOut = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
fadeInAndOut.duration = 5.0;
fadeInAndOut.autoreverses = NO;
fadeInAndOut.keyTimes = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:1.0],
[NSNumber numberWithFloat:4.0],
[NSNumber numberWithFloat:5.0], nil];
fadeInAndOut.values = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:1.0],
[NSNumber numberWithFloat:1.0],
[NSNumber numberWithFloat:0.0], nil];
fadeInAndOut.beginTime = 1.0;
fadeInAndOut.removedOnCompletion = NO;
fadeInAndOut.fillMode = kCAFillModeBoth;
[titleLayer addAnimation:fadeInAndOut forKey:nil];