SDWebImageLottieCoder
用途
这是一个用于 Lottie 动画格式 的 coder 插件。
差异
我们已经构建了一个名为 SDWebImageLottiePlugin 的 Lottie 插件。
这两个组件的主要区别在于我们的 播放动画的方式
和 使用的依赖项
。为了减少不必要的依赖项代码大小,我们将它们分为两个不同的仓库。
SDWebImageLottiePlugin
这个 Lottie 框架依赖于 Airbnb 维护的 lottie-ios。
这个插件只能通过他们自己的 LOTAnimationView
来播放动画。
-
优点:它使用向量渲染技术,例如Core Animation Layer,这意味着您可以动态更改视图大小而不会丢失细节或重新生成图像。
-
缺点:向量渲染比位图渲染慢得多。对于小型和大批量洛蒂图像,如表情符号和小图标,这不适用。
SDWebImageLottieCoder
此洛蒂框架依赖于由三星维护的rlottie。
此插件可以在SDAnimatedImageView和UIImageView/NSImageView
上播放动画。
-
优点:它使用位图渲染,每个动画帧都渲染成光栅化位图,而不是矢量图像。您还可以将所有帧预加载到内存中,以获得最佳性能和60FPS。这也很容易集成到UIKit/AppKit原生框架中。
-
缺点:位图渲染不支持动态尺寸更改。一旦您需要更大图像,就必须重新解码源洛蒂JSON,这既耗时又消耗RAM。
示例
要运行示例项目,请克隆仓库,然后从Example目录运行pod install
。
要求
- iOS 9+
- macOS 10.11+
- tvOS 9.0+
- watchOS 2.0+
- Xcode 11+
安装
CocoaPods
SDWebImageLottieCoder可通过CocoaPods使用。要安装它,只需将以下行添加到Podfile中即可:
pod 'SDWebImageLottieCoder'
Carthage
SDWebImageLottieCoder 可以通过 Carthage 获取。
github "SDWebImage/SDWebImageLottieCoder"
Swift 包管理器 (Xcode 11 及以上版本)
SDWebImageLottieCoder 可以通过 Swift 包管理器 获取。
let package = Package(
dependencies: [
.package(url: "https://github.com/SDWebImage/SDWebImageLottieCoder.git", from: "0.1")
]
)
SDWebImageLottieCoder可通过CocoaPods使用。要安装它,只需将以下行添加到Podfile中即可:
pod 'SDWebImageLottieCoder'
用法
添加编码器
在使用 SDWebImage 加载 Lottie json 之前,您需要将 Lottie Coder 注册到您的编码器管理器中。建议在您的应用启动后(例如 AppDelegate 方法)执行此操作。
- Objective-C
// Add coder
SDImageLottieCoder *lottieCoder = [SDImageLottieCoder sharedCoder];
[[SDImageCodersManager sharedManager] addCoder:lottieCoder];
- Swift
// Add coder
let lottieCoder = SDImageLottieCoder.shared
SDImageCodersManager.shared.addCoder(lottieCoder)
加载
- Objective-C
// Lottie json loading
NSURL *lottieURL;
UIImageView *imageView;
[imageView sd_setImageWithURL:lottieURL];
- Swift
// Lottie json loading
let lottieURL: URL
let imageView: UIImageView
imageView.sd_setImage(with: lottieURL)
动画和大小
- Objective-C
// Lottie json loading on animated image view
NSURL *lottieURL;
SDAnimatedImageView *imageView;
CGSize pixelSize = CGSizeMake(300, 300);
[imageView sd_setImageWithURL:lottieURL placeholderImage:nil options:0 context:@{SDWebImageThumbnailPixelSize:@(pixelSize)}];
- Swift
// Lottie json loading on animated image view
let lottieURL: URL
let imageView: SDAnimatedImageView
let pixelSize = CGSize(width: 300, height: 300)
imageView.sd_setImage(with: lottieURL, placeholderImage: nil, options: [], contrext: [.thumbnailPixelSize : pixelSize])
解码
您还可以将Lottie图像解码成动态的UIImage/NSImage。如果Lottie图像有引用的外部图像资源,您也可以指定。
- Objective-C
// Lottie image decoding
NSData *lottieJSONData;
NSBundle *imageBundle; // You can even download the external image from online to local path, then load the lottie animation
UIImage *image = [[SDImageLottieCoder sharedCoder] decodedImageWithData:lottieJSONData options:@{SDImageCoderDecodeLottieResourcePath : imageBundle.resourcePath}];
- Swift
// Lottie image decoding
let lottieJSONData: Data
let imageBundle: Bundle // You can even download the external image from online to local path, then load the lottie animation
let image = SDImageWebPCoder.shared.decodedImage(with: lottieJSONData, options: [.lottieResourcePath : imageBundle.resourcePath])
截图
这些Lottie动画贴纸来自lottiefiles-telegram
作者
DreamPiggy, [email protected]
许可
SDWebImageLottieCoder遵循MIT许可。更多信息请参阅LICENSE文件。