diff --git a/README.md b/README.md index 9e64487..fd41e18 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,61 @@ -# Gifu + +Adds animated GIF support to UIKit. For the Japanese prefecture, click [here](https://goo.gl/maps/CCeAc). -Adds animated GIF support to UIImageView. +#### Why? +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 +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): + +```swift +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](https://github.com/ondalabs/OLImageView), then improved in [YLGIFImage](https://github.com/liyong03/YLGIFImage). + +- The font used in the logo is [Azuki](http://www.myfonts.com/fonts/bluevinyl/azuki/) + +- Kudos to my colleague [Tony DiPasquale](https://github.com/tonyd256) for helping out with the factory methods. + +#### License + +See LICENSE. diff --git a/figure.gif b/figure.gif new file mode 100644 index 0000000..28cbf19 Binary files /dev/null and b/figure.gif differ diff --git a/logo.svg b/logo.svg new file mode 100644 index 0000000..7356fcc --- /dev/null +++ b/logo.svg @@ -0,0 +1,10 @@ + + + + logo + Created with Sketch. + + + + + \ No newline at end of file