Adds animated GIF support to UIKit. For the Japanese prefecture, click here.
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 in this example (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(...))
You can start/stop the animation using UIImageView
's startAnimating()
and
stopAnimating()
.
You can find a demo here (requires Xcode 6 Beta-7).
Compatibility
- iOS 7+
Roadmap
The usual suspects:
- Add documentation.
- Write some basic tests.
Needless to say, you are welcome to contribute.
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.
-
The characters used in the icon and example image in the demo are from Samurai Champloo. The name and characters are property of their respective owners.
License
See LICENSE.