e095fb534c | ||
---|---|---|
Gifu.swift | ||
ImageSourceHelpers.swift | ||
LICENSE | ||
README.md | ||
UIImageView+Gifu.swift | ||
figure.gif | ||
logo.svg |
README.md
Why?
Because Apple's +animatedImage*
sucks, and the few third party implementations that
got it right (see Credits) still require you to use a UIImageView
subclass.
How?
Gifu is a UIImage
subclass and UIImageView
extension written in Swift.
It uses CADisplayLink
to animate the view and only keeps a limited number of
frames in-memory, which exponentially minimizes memory usage for large GIF files (+300
frames).
The figure below summarizes how this works in practice. Given an image containing 10 frames, Gifu will load the current frame (red), pre-load the next two frames (orange), and nullify all the other frames to free up memory (gray):
Usage
Use git submodules or drag-and-drop the files in your Xcode project. I can't believe I'm saying this in 2014.
Once done, you can call setAnimatableImage(named:)
or
setAnimatableImage(data:)
on your UIImageView
(or its subclass):
let imageView = UIImageView(...)
imageView.setAnimatableImage(named: "computer-kid.gif")
// or
imageView.setAnimatableImage(data: NSData(...))
To-do
The usual suspects:
- Add documentation.
- Write some basic tests.
Nice-to-haves:
- Use Reactive Cocoa instead of (sloppy) delegation.
- Remove side effects from the private functions.
Credits
-
The animation technique described above was originally spotted on OLImageView, then improved in YLGIFImage.
-
The font used in the logo is Azuki
-
Kudos to my colleague Tony DiPasquale for helping out with the factory methods.
License
See LICENSE.