d1fe7264e5 | ||
---|---|---|
source | ||
LICENSE | ||
README.md | ||
figure.gif | ||
logo.svg |
README.md
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")
// imageView.setAnimatableImage(data: NSData(...))
The image view will not start animating until you call startAnimating()
on it. You can stop the animation anytime using stopAnimating()
, and resume
it using startAnimating()
.
The isAnimating()
method returns the current animation state of the view.
For an example, check out the demo app here (requires Xcode 6).
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.
License
See LICENSE.