JMAnimatedImageView

by leverdeterre

leverdeterre /JMAnimatedImageView

Subclass of UIImageView to drive easy animations (manual rotation, Carousel, GIF support)

414 Stars 44 Forks Last release: over 5 years ago (0.2.4) Other 81 Commits 7 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

My other works

http://leverdeterre.github.io

JMAnimatedImageView

JMAnimatedImageView is a performant subclass of UIImageView:

  • Plays huge image animation using a minimum memory pressure,
  • Allows manual interactions with imageView to drive manualy animations,
  • Can use has a Carousel,
  • GIF are supported to load your animations.

Change Log

0.2.4 :

  • Improve documentation
  • Fix retain cycle (Thanks Instruments!)
  • JMGif allocation for a better integration with your favorites network libraries.

Installation

Simply replace your

UIImageView
instances with instances of
JMAnimatedImageView
.

If using CocoaPods, the quickest way to try it out is to type this on the command line:

$ pod try JMAnimatedImageView

Usage

For a local animation using file from a bundle

In your code,

#import "JMAnimatedImageView.h"
and
#import "JMAnimatedImageView.h"
//GIF example
@property (weak, nonatomic) IBOutlet JMAnimatedImageView *jmImageView;

[self.jmImageView reloadAnimationImagesFromGifNamed:@"rock"]; self.jmImageView.animationType = JMAnimatedImageViewAnimationTypeAutomaticLinearWithoutTransition; [self.jmImageView startAnimating];

//PNG example with manual animation
@property (weak, nonatomic) IBOutlet JMAnimatedImageView *jmImageView;

self.jmImageView.animationDelegate = self; self.jmImageView.animationDatasource = self; [self.jmImageView reloadAnimationImages]; // self.jmImageView.animationType = JMAnimatedImageViewAnimationTypeAutomaticLinearWithoutTransition; self.jmImageView.memoryManagementOption = JMAnimatedImageViewMemoryLoadImageLowMemoryUsage; [self.jmImageView startAnimating];

For a remote Gif

@property (weak, nonatomic) IBOutlet JMAnimatedImageView *jmImageView;

[[JMApi sharedApi] downloadYourGifFileHasData:^(NSData *gifData) { self.animatedImageView.animationType = JMAnimatedImageViewAnimationTypeAutomaticLinearWithoutTransition; self.animatedImageView.memoryManagementOption = JMAnimatedImageViewMemoryLoadImageLowMemoryUsage; [self.animatedImageView reloadAnimationImagesFromGifData:gifData fromUrl:url]; [self.animatedImageView startAnimating]; }];

For a remote Gif using AFNetworking

    NSURLRequest *req = [NSURLRequest requestWithURL:url];

AFHTTPRequestOperation *postOperation = [[AFHTTPRequestOperation alloc] initWithRequest:req];
[postOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    self.animatedImageView.animationType = JMAnimatedImageViewAnimationTypeAutomaticLinearWithoutTransition;
    self.animatedImageView.memoryManagementOption = JMAnimatedImageViewMemoryLoadImageLowMemoryUsage;
    [self.animatedImageView reloadAnimationImagesFromGifData:responseObject fromUrl:url];
    [self.animatedImageView startAnimating];

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Image error: %@", error);
    block(NO, nil);
}];

[postOperation start];

Customizations

  • AnimationType
typedef NS_ENUM(NSUInteger, JMAnimatedImageViewAnimationType) {
    JMAnimatedImageViewAnimationTypeInteractive = 0,

//Animation, carousel effect
JMAnimatedImageViewAnimationTypeManualSwipe,

//Automatic rotation, use animationDuration + animationRepeatCount
JMAnimatedImageViewAnimationTypeAutomaticLinear,    
JMAnimatedImageViewAnimationTypeAutomaticLinearWithoutTransition,
JMAnimatedImageViewAnimationTypeAutomaticReverse,

};

  • MemoryOption
typedef NS_ENUM(NSUInteger, JMAnimatedImageViewMemoryOption) {
    JMAnimatedImageViewMemoryLoadImageSystemCache = 0,  //images memory will be retain by system
    JMAnimatedImageViewMemoryLoadImageLowMemoryUsage,   //images loaded but not retained by the system
    JMAnimatedImageViewMemoryLoadImageCustom            //images loaded by you (JMOImageViewAnimationDatasource)
};
  • ImageViewOrder
typedef NS_ENUM(NSUInteger, JMAnimatedImageViewOrder) {
    JMAnimatedImageViewOrderNormal = 1,
    JMAnimatedImageViewOrderReverse = -1
};

Multi Gif and animation type (top interactive, leff automatic swipe effect, right automatic without animation)

Image

JMimageView can generate Carousels

Image

JMimageView allows interactive animations

Image

TODO

  • Add support for APNG
  • Add support for WebP animated (work in progress but this feature is not actually supported : https://chromium.googlesource.com/webm/libwebp/)
  • * Add support for video format ?

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.