用于 iOS 上的电影动画的 AVAnimator

Posted

技术标签:

【中文标题】用于 iOS 上的电影动画的 AVAnimator【英文标题】:AVAnimator for movie animations on iOS 【发布时间】:2013-09-10 23:15:13 【问题描述】:

我正在使用 AVAnimator 库以便在我的 ios 应用程序中使用电影动画。我的动画效果很好,但我需要能够在动画结束后移除它,并且即使在前一个动画完成之前也允许相同的动画在其自身之上播放。

这是我用来制作动画的代码:

    bassView = [AVAnimatorView aVAnimatorViewWithFrame:CGRectMake(322,460,375,224)];
    AVAnimatorMedia *media = [AVAnimatorMedia aVAnimatorMedia];
    AV7zAppResourceLoader *resLoader = [AV7zAppResourceLoader aV7zAppResourceLoader];
    resLoader.archiveFilename = @"Archive.7z";
    resLoader.movieFilename = @"bass_iPad.mvid";
    resLoader.outPath = [AVFileUtil getTmpDirPath:@"bass_iPad.mvid"];
    media.resourceLoader = resLoader;
    AVMvidFrameDecoder *frameDecoder = [AVMvidFrameDecoder aVMvidFrameDecoder];
    media.frameDecoder = frameDecoder;
    media.animatorFrameDuration = AVAnimator10FPS;      // this is a constant I made for the frame rate
    [media prepareToAnimate];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(animatorDoneNotification:)
                                                 name:AVAnimatorDoneNotification
                                               object:media];
    [mainView addSubview:bassView];
    [bassView attachMedia:media];
    [media startAnimator];

- (void)animatorDoneNotification:(NSNotification*)notification 
    NSLog(@"animation done");
    AVAnimatorMedia *media = notification.object;
   [media stopAnimator];
   [bassView removeFromSuperview];

【问题讨论】:

【参考方案1】:

当您收到指示动画循环完成的通知时,您应该使用 [bassView attachMedia:nil] 断开媒体对象与窗口/视图的连接。只需调用 stopAnimator 将停止向视图发送新帧,但如果动画循环真的完成,那么断开媒体与视图的连接将释放资源并释放内存。此外,您不需要设置 animatorFrameDuration,因为它是在读取 .mvid 文件时默认定义的。如果您想更改播放帧率,您可以明确设置它,但您可以在桌面上创建电影时通过“mvidmoviemaker Frame1.png Movie.mvid -fps 10”对电影中的FPS进行编码。

如果您想一次在屏幕上播放具有多个实例的相同动画,您需要创建 2 个不同的媒体对象,然后在适当的时间启动和停止它们。您将需要将这些媒体对象附加到屏幕上的不同视图对象,但仅此而已。您可能会使用 1 个媒体对象对其进行编码,等待它加载,然后一旦第一个媒体对象准备好,您可以将相同的加载程序分配给第二个媒体对象,并从 tmp 目录中相同的已解压缩文件中读取它。您还可以使用通用方法为同一个输入文件创建 2 个不同的加载程序,但请注意,如果两个不同的加载程序在应用程序启动时都加载同一个文件,则存在线程竞争条件,您还可以在您的loader 对象以避免竞争条件。

【讨论】:

以上是关于用于 iOS 上的电影动画的 AVAnimator的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPod 仍在播放音频时将 iOS 上的视频静音?

求些好看的动画电影。

iOS 开发--转场动画

无法在 React 上的 Pixijs 中运行精灵动画

maya2019最新激活工具有没有分享?用在MacBook上的。

选择在 iOS 应用上的外部浏览器中加载的内容