CoreAnimation - анимация затухания непрозрачности не работает

Я пытаюсь создать довольно простую 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 секунд. Как и заголовок, их анимации затухания работают нормально.

Любая помощь будет очень признательна!

Будьте здоровы!

EDIT

Все ответы были полезны, но в итоге я обнаружил, что в 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]; 
21
задан Ravi Gautam 30 June 2015 в 07:51
поделиться