From 8013faea8717942492913105e91c1f3eb7107f54 Mon Sep 17 00:00:00 2001 From: Reda Lemeden Date: Fri, 12 Dec 2014 23:29:10 +0100 Subject: [PATCH] Update README to reflect API changes --- README.md | 44 +++++++++++++++----------------------------- 1 file changed, 15 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 4192443..2af87eb 100644 --- a/README.md +++ b/README.md @@ -4,20 +4,12 @@ Adds performant animated GIF support to UIKit, without subclassing `UIImageView` #### Why? -Because Apple's `+animatedImage*` is not meant to be used for animated GIFs (loads all the frames in memory), and the few third party implementations that got it right (see [Credits](#credits)) still require you to use a `UIImageView` subclass, which is not very flexible and might clash with other application-specific functionality. +Because Apple's `+animatedImage*` is not meant to be used for animated GIFs (loads all the full-sized frames in memory), and the few third party implementations that got it right (see [Credits](#credits)) still require you to use a `UIImageView` subclass, which is not very flexible and might clash with other application-specific functionality. #### 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): - - +Gifu uses a `UIImage` subclass and `UIImageView` extension written in Swift. +It relies on `CADisplayLink` to animate the view and optimizes the frames by resizing them. #### Install @@ -27,17 +19,15 @@ If your prefer Git submodules or want to support iOS 7, you want to add the file #### Usage -Call `setAnimatableImage(named:)` or -`setAnimatableImage(data:)` on your `UIImageView` (or its subclass): +Start by instantiating an `AnimatedImage`, then pass it to your `UIImageView`'s `setAnimatedImage`: ```swift -let imageView = UIImageView(...) - -imageView.setAnimatableImage(named: "computer-kid.gif") -// imageView.setAnimatableImage(data: NSData(...)) +if let image = AnimatedImage.animatedImageWithName("mugen.gif") { + imageView.setAnimatedImage(image) + imageView.startAnimatingGIF() +} ``` - -The image view will not start animating until you call `startAnimatingGIF()` +Note that the image view will not start animating until you call `startAnimatingGIF()` on it. You can stop the animation anytime using `stopAnimatingGIF()`, and resume it using `startAnimatingGIF()`. These methods will fallback to UIKit's `startAnimating()` and `stopAnimating()` if the image view has no animatable image. @@ -55,22 +45,18 @@ or UIKit's `isAnimating()` otherwise. #### Roadmap -The usual suspects: - -- Add documentation. +- Documentation. - Write some basic tests. +- Add ability to pass a frame-rate argument to `startAnimatingGIF()` -Needless to say, you are welcome to contribute. +#### Contributors -#### Credits +- [Reda Lemeden](https://github.com/kaishin) +- [Tony DiPasquale](https://github.com/tonyd256) -- The animation technique described above was originally spotted on -[OLImageView](https://github.com/ondalabs/OLImageView), then improved in [YLGIFImage](https://github.com/liyong03/YLGIFImage). +#### Misc - 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. - - The characters used in the icon and example image in the demo are from [Samurai Champloo](https://en.wikipedia.org/wiki/Samurai_Champloo). #### License