Power efficient GIF display for SwiftUI

Giffy

Giffy is a lightweight package that allows you to display animated GIF in SwiftUI views. Powered by the field-tested FLAnimatedImage, all your displayed animations will be very performant while beign memory efficient.

Giffy can be used to display both GIF files stored locally and from remote URLs, providing a very familiar API that will feel right at home in a SwiftUI environment

Requirements

  • iOS 14.0 or later

Usage

Local Files

To display an animation from a local GIF file, use the Giffy component:

Giffy("cat")

If your GIF is stored on another bundle outside your project’s main bundle, you can specify the Bundle to load the animation from.

// Loads an animation from the provided bundle
LottieView("cat", bundle: DesignSystem.Bundle.main)

Or if you want to use the path to your GIF file, you can simply pass it as well:

// Loads a GIF file from the provided path
LottieView(path: URL(string: "path/to/cat.gif")!)

Remote Files

If you want to display a GIF from the web, use the AsyncGiffy component. You can also setup a placeholder view to be displayed while the view is beign loaded and a view to be displayed in place in case the GIF fails to load:

let url = URL(string: "https://media.giphy.com/media/RrVzUOXldFe8M/giphy.gif")!

AsyncGiffy(url: url) { phase in
    switch phase {
    case .loading:
        ProgressView()
    case .error:
        Text("Failed to load GIF")
    case .success(let giffy):
        giffy
    }
}

Features

Apart from displaying GIFs, you can also set an action to be executed each time an animation loops with the .onLoop(:) modifier:

@State let jumpCount = 0
VStack {
    AsyncGiffy(url: gifURL) { phase in
        switch phase {
        case .loading:
            ProgressView()
        case .error:
            Text("Failed to load GIF")
        case let .success(giffy):
            giffy
                .onLoop {
                    jumpCount += 2
                }
        }
    }
    Text("Jump count: \(jumpCount)")
}

Installation

Currently, Giffy can be installed through Swift Package Manager

To add this package to your project, go to File -> Swift Package Manager -> Add Package Dependency... in Xcode’s menu and paste this Github page URL on the search bar

You can also add Giffy by adding it as a dependecy on your Package.swift file:

dependencies: [
    .package(url: "https://github.com/tfmart/Giffy.git", .upToNextMajor(from: "1.0.0"))
],
targets: [
    .target(name: "MyProject", dependencies: ["Giffy""])
]

GitHub

View Github