SwiftyGif 5.4.5

SwiftyGif 5.4.5

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2024年3月
SPM支持 SPM

Alexis CreuzotAlexis CreuzotGiuseppe Travasoni 维护。



SwiftyGif 5.4.5

  • Alexis Creuzot

Language CocoaPods Compatible Carthage compatible Build Status Pod License

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 使用熟悉的 UIImageUIImageView 来显示 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 上测量。