• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - CFBasicAnimation 中带有自定义键的动画在导出视频时不起作用

[复制链接]
菜鸟教程小白 发表于 2022-12-13 13:34:19 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有 FrameChangeAnimation 类,它需要多个 Sprite 表和持续时间。所以假设我有 3 个 spritesheet,每个包含 16 个字符 block ,然后我给 '3' 秒作为持续时间。在将 FrameChangeAnimation 实例作为 CALayer 返回后,我将其附加到屏幕上,它可以流畅地播放 [16 帧/秒]

现在我想将此动画导出为视频。问题是,当我这次附加 CABasicAnimation 时,持续时间。 'Duration' 参数不起作用,所有帧都在一秒钟内播放。

    GTAnimation *an = [[GTAnimation alloc] initWithFrame:CGRectMake(0, 0, videoSize.width, videoSize.height) withFileName"Host_Angry_" withSeconds:3.5];

    CALayer *animationLayer = [CALayer layer];
    animationLayer.bounds = CGRectMake(0, 0, videoSize.width, videoSize.height);
    [animationLayer addSublayer:an.animLayer];

    CABasicAnimation *fadeAnimation = [CABasicAnimation animationWithKeyPath"currentFrame"];
    fadeAnimation.fromValue = [NSNumber numberWithFloat:1.0];
    fadeAnimation.toValue = [NSNumber numberWithFloat:45.0];
    fadeAnimation.additive = NO;
    fadeAnimation.removedOnCompletion = NO;
    fadeAnimation.beginTime = 0.0;
    fadeAnimation.duration = 3.5;
    fadeAnimation.repeatCount = HUGE_VAL;
    fadeAnimation.fillMode = kCAFillModeBoth;
    [an.animLayer addAnimation:fadeAnimation forKey"currentFrame"];

    CALayer *parentLayer = [CALayer layer];
    CALayer *videoLayer = [CALayer layer];

    videoLayer.bounds = CGRectMake(0, 0, videoSize.width, videoSize.height);
    [parentLayer addSublayer:videoLayer];
    [parentLayer addSublayer:animationLayer];
    videoLayer.anchorPoint =  CGPointMake(0.5, 0.5);
    videoLayer.position = CGPointMake(CGRectGetMidX(parentLayer.bounds), CGRectGetMidY(parentLayer.bounds));
    animationLayer.anchorPoint =  CGPointMake(0.5, 0.5);
    animationLayer.position = CGPointMake(CGRectGetMidX(parentLayer.bounds), CGRectGetMidY(parentLayer.bounds));
    videoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];



Best Answer-推荐答案


根据 AVVideoCompositionCoreAnimationTool 类的文档,

“任何动画都将在视频的时间线上进行解释,而不是实时的,因此您应该:

将动画的 beginTime 属性设置为 1e-100 而不是 0(CoreAnimation 将其替换为 CACurrentMediaTime);

关于ios - CFBasicAnimation 中带有自定义键的动画在导出视频时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10448482/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap