FLAnimatedImage 1.0.17

FLAnimatedImage 1.0.17

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
发布上次发布2022年8月

Raphael SchaadFlipboardChaoshuai Lu 维护。




  • Raphael Schaad

FLAnimatedImage · GitHub license PRs Welcome

FLAnimatedImage 是一个高性能的 iOS 动画 GIF 引擎

  • 以与桌面浏览器相当的播放速度同时播放多个 GIF
  • 尊重可变帧延迟
  • 在内存压力下表现出色
  • 消除第一次播放循环中的延迟或阻塞
  • 以与现代浏览器相同的方式解释快速 GIF 的帧延迟

它是一个经过良好测试的 组件,为 Flipboard 上的所有 GIF 提供动力。为了了解其行为,它附带一个交互式演示

Flipboard playing multiple GIFs

它是为谁准备的?

  • 尚未支持动画 GIF 的应用程序
  • 已经支持动画 GIF 但希望获得更高性能解决方案的应用程序
  • 想研究代码的人(相关的博客文章 是一个好的起点;也可以查看下面的 待办事项 部分)

安装与使用

FLAnimatedImage 是一个封装良好的组件。只需将您现有的 UIImageView 实例替换为 FLAnimatedImageView 实例,即可获得动画 GIF 支持。无需管理任何中央缓存或状态。

如果您使用 CocoaPods,最快捷的方法是在命令行中输入以下命令

$ pod try FLAnimatedImage

要将它添加到您的应用程序中,将两个类 FLAnimatedImage.h/.mFLAnimatedImageView.h/.m 复制到您的 Xcode 项目中,或者通过添加以下内容到您的 Podfile 通过 CocoaPods

pod 'FLAnimatedImage', '~> 1.0'

如果您使用 Carthage,将以下行添加到您的 Cartfile

github "Flipboard/FLAnimatedImage"

如果您使用 Swift Package Manager,将以下内容添加到您的 Package.swift 或通过 XCode 添加

dependencies: [
    .package(url: "https://github.com/Flipboard/FLAnimatedImage.git", .upToNextMajor(from: "1.0.16"))
],
targets: [
    .target(name: "TestProject", dependencies: ["FLAnimatedImage""])
]

在您的代码中,#import "FLAnimatedImage.h",从一个动画 GIF 创建一个图片,并设置图像视图以显示它

FLAnimatedImage *image = [FLAnimatedImage animatedImageWithGIFData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://upload.wikimedia.org/wikipedia/commons/2/2c/Rotating_earth_%28large%29.gif"]]];
FLAnimatedImageView *imageView = [[FLAnimatedImageView alloc] init];
imageView.animatedImage = image;
imageView.frame = CGRectMake(0.0, 0.0, 100.0, 100.0);
[self.view addSubview:imageView];

它灵活地集成到您的自定义图像加载堆栈中,并与 iOS 9 兼容。

它使用 ARC 和苹果框架 QuartzCoreImageIOMobileCoreServicesCoreGraphics

它能够进行精细粒度的日志记录。可以使用 +setLogBlock:logLevel: 方法设置一个块在 FLAnimatedImage 上调用,通过各种日志级别记录各种日志。例如

// Set up FLAnimatedImage logging.
[FLAnimatedImage setLogBlock:^(NSString *logString, FLLogLevel logLevel) {
    // Using NSLog
    NSLog(@"%@", logString);

    // ...or CocoaLumberjackLogger only logging warnings and errors
    if (logLevel == FLLogLevelError) {
        DDLogError(@"%@", logString);
    } else if (logLevel == FLLogLevelWarn) {
        DDLogWarn(@"%@", logString);
    }
} logLevel:FLLogLevelWarn];

由于 FLAnimatedImage 授权基于 MIT 协议,因此它符合在 App Store 上的任何应用程序中使用它的条款。

发布流程

  1. FLAnimatedImage.podspec 中增加版本号,更新 CHANGES 并提交。
  2. 使用 > git tag -a <VERSION> -m "<VERSION>" 标记提交,并使用 > git push --tags 推送。
  3. 使用以下命令将 Podspec 提交到 trunk Submit Podspec to Trunk with > pod trunk push FLAnimatedImage.podspec (确保您已进行身份验证 确保您已进行身份验证)。

待办事项

  • 支持其他动画图像格式,例如 APNG 或 WebP (WebP 支持已在此处实现 here
  • 集成到网络库和图像缓存中
  • 调查 FLAnimatedImage 是否应成为 UIImage 的子类
  • 更智能的缓冲
  • 将示例应用程序带到 iPhone 上

此代码已经作为是的方式成功交付给许多人,但请务必提出您的问题、问题和拉取请求!

使用 FLAnimatedImage 选择应用程序

(按字母顺序)

如果您在应用程序中使用了 FLAnimatedImage,请提交一个 PR 添加到这个列表!