65 lines
2.0 KiB
Raw Normal View History

2014-09-07 22:39:40 +00:00
<img src="" width="100" />
2014-09-07 21:48:09 +00:00
2014-09-07 21:45:51 +00:00
Adds animated GIF support to UIKit. For the Japanese prefecture, click [here](
2014-09-06 14:17:20 +00:00
2014-09-07 21:45:51 +00:00
#### Why?
2014-09-07 22:36:05 +00:00
2014-09-07 21:45:51 +00:00
Because Apple's `+animatedImage*` sucks, and the few third party implementations that
got it right (see [Credits](#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
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):
2014-09-07 22:36:05 +00:00
<img src="" width="300" />
2014-09-07 21:45:51 +00:00
#### 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(...))
2014-09-07 22:36:05 +00:00
You can find a demo app [here](
2014-09-07 21:45:51 +00:00
#### To-do
The usual suspects:
- Add documentation.
- Write some basic tests.
- 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