SDWebImageLottiePlugin
它是为什么
SDWebImageLottiePlugin 是 SDWebImage 框架的插件,它可以从 JSON 文件中加载 Lottie 动画。
您可以在他们的 官方网站 上找到更多关于 Lottie 的资源。
要求
- iOS 11+
- macOS 10.11+
- tvOS 11+
- Xcode 11+
安装
Swift 包管理器
SDWebImageWebPCoder 可通过 Swift 包管理器 获得。
let package = Package(
dependencies: [
.package(url: "https://github.com/SDWebImage/SDWebImageLottiePlugin.git", from: "1.0.0")
]
)
Cocoapods
SDWebImageLottiePlugin 可通过 Cocoapods 获得。要安装它,只需将以下行添加到您的 Podfile 中
pod 'SDWebImageLottiePlugin', '~> 1.0'
Carthage(已弃用)
SDWebImageLottiePlugin 可通过 Carthage 获得。
github "SDWebImage/SDWebImageLottiePlugin", ~> 1.0
注意
- 由于模块名称为
Lottie_macOS
而不是Lottie
,Carthage macOS 集成存在问题,请在以下链接等待问题修复:此处👀
Lottie 2 与 Objective-C
Lottie 3.4 版本的新的 Lottie.RenderingEngine = .coreAnimation
解决了以下问题 此处
因此,从 SDWebImageLottiePlugin v1.0.0 版本开始,我们不支持 Lottie 2 以及 Objective-C,因为 Lottie 3 使用纯 Swift。因此,我们也不再支持 iOS 9-10 版本,因为上游依赖项需要 iOS 11及更高版本。
对于仍在使用 Lottie 2 和 Objective-C 的用户,请检查 0.x 版本更新到 0.3.0
使用方法
从远程JSON加载Lottie动画
- Swift
let animationView: Lottie.AnimationView
let lottieJSONURL: URL
animationView.sd_setImage(with: lottieJSONURL)
注意
- 您也可以在
AnimatedControl
上加载Lottie JSON文件,例如开关按钮。 - Lottie动画不会自动播放,您可以使用完成块或UITableView/UICollectionView的显示计时来播放。
animationView.sd_setImage(with: lottieUrl, completed: { _,_,_,_ in
self.animationView.play(fromProgress: 0, toProgress: 1, loopMode: .repeat(5)) { finished in
// ...
}
}
- 如果您的Lottie JSON文件中包含对App包内图像的引用,只需在Lottie动画开始前设置
imageProvider
即可。
let bundle = Bundle(for: MyBundleClass.self)
animationView.imageProvider = BundleImageProvider(bundle: bundle, searchPath: nil)
animationView.sd_setImage(with: lottieUrl)
高级使用
此Lottie插件使用包装类LottieImage
,因为SDWebImage的定制化架构设计。通常您无需关心这一点,但这可以允许一些高级使用。
- Swift
let animation = try? JSONDecoder().decode(Animation.self, from: data)
let animatedImage = LottieImage(animation: animation)
// Optional, custom image bundle
LottieImage.imageProvider = BundleImageProvider(bundle: bundle, searchPath: nil)
// Snapshot Lottie animation frame
UIImage *posterFrame = animatedImage.animatedImageFrame(at: 0)
TimeInterval duration = animatedImage.animatedImageDuration(at: 0)
注意
- 快照是位图版本,用于特殊场合,如缩略海报。最好不要在
SDAnimatedImageView
上播放。因为Lottie是矢量动画,而Lottie.AnimationView
使用Core Animation进行渲染,这更快。
演示
如果您在使用过程中有任何问题,SDWebImageLottiePlugin为iOS和macOS平台提供了一个演示。要运行演示,请克隆该仓库并运行以下命令。
cd Example/
pod install
open SDWebImageLottiePlugin.xcworkspace
在打开Xcode项目后,点击运行
以构建和运行演示。
截图
- iOS演示
- macOS演示
lottie json文件来自lottie-web示例
作者
DreamPiggy
许可证
SDWebImageLottiePlugin遵循MIT许可证。有关更多信息,请参阅LICENSE文件。