在特定时间向视频添加文本层

4

我想在视频的最后4秒添加一个文本层。这是我目前的情况:

// 1 - Set up the watermark text layer
    CATextLayer *waterMarkText = [[CATextLayer alloc] init];
    [waterMarkText setFont:@"Helvetica-Neue"];
    [waterMarkText setFontSize:30];
    [waterMarkText setFrame:CGRectMake(0, 0, self.size.width, 80)];
    [waterMarkText setString:@"made with Videofy"];
    [waterMarkText setAlignmentMode:kCAAlignmentRight];
    [waterMarkText setForegroundColor:[[UIColor whiteColor] CGColor]];

//Fade In the watermark
    CABasicAnimation *fadeInAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];

    fadeInAnimation.duration = 2;
    fadeInAnimation.fromValue = [NSNumber numberWithFloat:0.0];
    fadeInAnimation.toValue = [NSNumber numberWithFloat:1.0];
    fadeInAnimation.beginTime = videoDuration - 4;
    fadeInAnimation.removedOnCompletion = NO;
    [overlayLayer addAnimation:fadeInAnimation forKey:@"animateOpacity"];

在最终视频中加入了动画,但水印从视频一开始就可见。 如何在动画开始前将不透明度设置为0?

(我已尝试将watermarkText的不透明度设置为0,但似乎会覆盖动画。)


在创建水印后,尝试将waterMarkText的不透明度设置为0.0,并将动画关键字从“animateOpacity”更改为“opacity”。并尝试将动画添加到waterMarkText而不是overlayLayer。另外,您是否将水印层添加到根层中? - eoLithic
我也遇到了同样的问题@Kaitis,请给出一些建议。 - Anand Gautam
您需要为动画添加关键时间。请查看此答案(https://stackoverflow.com/questions/50039910/add-text-to-video-for-specific-time-in-ios)。 - Nare Muradyan
1个回答

3

为了让出现和消失的效果起作用,您需要添加两个动画 - 每个动画一个。以下是适用于我的示例代码。在这种特殊情况下,我在视频的前0到1秒添加了一个文本层。您应该为动画的开始时间设置自己的值。您应该在开始时将不透明度设置为0。

        textLayer.opacity = 0

        let startVisible = CABasicAnimation(keyPath: "opacity")
        startVisible.duration = 0.1 // for appearing in duration
        startVisible.repeatCount = 1
        startVisible.fromValue = 0.0
        startVisible.toValue = 1.0
        startVisible.beginTime = 0.0 // overlay time range start second
        startVisible.isRemovedOnCompletion = false
        startVisible.fillMode = CAMediaTimingFillMode.forwards
        textLayer.add(startVisible, forKey: "startAnimation")

        let endVisible = CABasicAnimation(keyPath: "opacity")
        endVisible.duration = 0.1 // for disappearing in duration
        endVisible.repeatCount = 1
        endVisible.fromValue = 1.0
        endVisible.toValue = 0.0
        endVisible.beginTime = 1.0 // overlay time range end second
        endVisible.fillMode = CAMediaTimingFillMode.forwards
        endVisible.isRemovedOnCompletion = false
        textLayer.add(endVisible, forKey: "endAnimation")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接