SwiftyGif
高性能且易于使用的 Gif 引擎
特性
- 基于 UIImage 和 UIImageView 扩展
- 带有自定义加载器的远程 Gif
- 优秀的 CPU/Memory 性能
- 控制播放
- 通过使用 'levelOfIntegrity' 控制显示质量
- 通过 'memoryLimit' 控制 CPU/内存权衡
安装
使用 CocoaPods
source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!
pod 'SwiftyGif'
使用 Carthage
按照 Carthage 的常规说明来 向应用程序中添加框架。当在 Cartfile
中列出框架时,使用其针对 GitHub 仓库 的语法。
github "kirualex/SwiftyGif"
使用 Swift Package Manager
https://github.com/kirualex/SwiftyGif.git
如何使用
项目文件
截至目前,Xcode 中的 xcassets
文件夹不识别 .gif
作为图像。这意味着您需要将您的 .gif
放在 assets 外面。我建议创建一个名为 gif
的文件夹,例如。
快速入门
SwiftyGif 使用熟悉的 UIImage
和 UIImageView
来显示 Gif 图像。
程序化地
import SwiftyGif
do {
let gif = try UIImage(gifName: "MyImage.gif")
let imageview = UIImageView(gifImage: gif, loopCount: 3) // Will loop 3 times
imageview.frame = view.bounds
view.addSubview(imageview)
} catch {
print(error)
}
直接从 nib/storyboard
@IBOutlet var myImageView : UIImageView!
...
let gif = try UIImage(gifName: "MyImage.gif")
self.myImageView.setGifImage(gif, loopCount: -1) // Will loop forever
远程 GIF
// You can also set it with an URL pointing to your gif
let url = URL(string: "...")
let loader = UIActivityIndicatorView(style: .white)
cell.gifImageView.setGifFromURL(url, customLoader: loader)
性能
SwiftyGifManager 可以 holding 一个或多个 UIImageView,并使用相同的内存池。这允许您根据需要调整内存限制。如果没有声明管理者,SwiftyGif 将使用 SwiftyGifManager.defaultManager
。
完整性级别
设置更低的完整性级别将允许跳过帧,降低 CPU 和内存使用率。如果需要同时预览大量 GIF,这可能是不错的选择。
do {
let gif = try UIImage(gifName: "MyImage.gif", levelOfIntegrity:0.5)
} catch {
print(error)
}
控件
SwiftyGif 提供对当前正在播放 GIF 文件的 UIImageView
的各种控件。
self.myImageView.startAnimatingGif()
self.myImageView.stopAnimatingGif()
self.myImageView.showFrameAtIndexDelta(delta: Int)
self.myImageView.showFrameAtIndex(index: Int)
为了方便使用这些控件,提供了一些实用方法。
self.myImageView.isAnimatingGif() // Returns wether the gif is currently playing
self.myImageView.gifImage!.framesCount() // Returns number of frames for this gif
代理
您可以声明一个 SwiftyGifDelegate 来接收 GIF 生命周期的更新。例如,如果您希望您的控制器 MyController
作为代理
override func viewDidLoad() {
super.viewDidLoad()
self.imageView.delegate = self
}
然后简单地添加一个扩展
extension MyController : SwiftyGifDelegate {
func gifURLDidFinish(sender: UIImageView) {
print("gifURLDidFinish")
}
func gifURLDidFail(sender: UIImageView) {
print("gifURLDidFail")
}
func gifDidStart(sender: UIImageView) {
print("gifDidStart")
}
func gifDidLoop(sender: UIImageView) {
print("gifDidLoop")
}
func gifDidStop(sender: UIImageView) {
print("gifDidStop")
}
}
基准
显示 1 图像
CPU 使用率(平均) | 内存使用率(平均) | |
---|---|---|
FLAnimatedImage | 35% | 9,5Mb |
SwiftyGif | 2% | 18,4Mb |
SwiftyGif(memoryLimit:10) | 34% | 9,5Mb |
显示 6 图像
CPU 使用率(平均) | 内存使用率(平均) | |
---|---|---|
FLAnimatedImage | 65% | 25,1Mb |
SwiftyGif | 22% | 105Mb |
SwiftyGif(memoryLimit:20) | 45% | 26Mb |
在 iPhone 6S、iOS 9.3.1 和 Xcode 7.3 上测量。