Three methods for loading gif dynamic images and gif dynamic
Preparation: local image resources, GIF View
GifView code:
/*** The call ends to start playing the animation. If you need to specify when to play the animation, you only need to place the start of timer in the appropriate position. By changing CFDictonaryRaf, that is, gifProperties, we can also control whether the animation is played cyclically and how many times it has been stopped. You can change the index to control the animation playing from a frame. Similarly, if you change both the index and count, you can also control the playback from a frame to a frame. Note:-(void) stopGif; then you can exit this class. Otherwise, timer will not be shut down, resulting in Memory leakage. */# Import <UIKit/UIKit. h> # import <ImageIO/ImageIO. h> @ interface GifView: UIView {CGImageSourceRef gif; // Save the gif animation NSDictionary * gifProperties; // Save the gif animation attribute size_t index; // the frame number size_t count starting when the gif animation is played; // The total number of frames of the GIF animation NSTimer * timer; // The timer used to play the GIF animation}-(id) initWithFrame :( CGRect) frame filePath :( NSString *) _ filePath;-(id) initWithFrame :( CGRect) frame data :( NSData *) _ data;-(void) stopGif;
#import "GifView.h"#import <QuartzCore/QuartzCore.h>@implementation GifView- (id)initWithFrame:(CGRect)frame filePath:(NSString *)_filePath{ self = [super initWithFrame:frame]; if (self) { gifProperties = [NSDictionary dictionaryWithObject:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:0] forKey:(NSString *)kCGImagePropertyGIFLoopCount] forKey:(NSString *)kCGImagePropertyGIFDictionary]; gif = CGImageSourceCreateWithURL((CFURLRef)[NSURL fileURLWithPath:_filePath], (CFDictionaryRef)gifProperties); count =CGImageSourceGetCount(gif); timer = [NSTimer scheduledTimerWithTimeInterval:0.12 target:self selector:@selector(play) userInfo:nil repeats:YES]; [timer fire]; } return self;}- (id)initWithFrame:(CGRect)frame data:(NSData *)_data{ self = [super initWithFrame:frame]; if (self) { gifProperties = [NSDictionary dictionaryWithObject:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:0] forKey:(NSString *)kCGImagePropertyGIFLoopCount] forKey:(NSString *)kCGImagePropertyGIFDictionary]; // gif = CGImageSourceCreateWithURL((CFURLRef)[NSURL fileURLWithPath:_filePath], (CFDictionaryRef)gifProperties); gif = CGImageSourceCreateWithData((CFDataRef)_data, (CFDictionaryRef)gifProperties); count =CGImageSourceGetCount(gif); timer = [NSTimer scheduledTimerWithTimeInterval:0.12 target:self selector:@selector(play) userInfo:nil repeats:YES]; [timer fire]; } return self;}-(void)play{ index ++; index = index%count; CGImageRef ref = CGImageSourceCreateImageAtIndex(gif, index, (CFDictionaryRef)gifProperties); self.layer.contents = (__bridge id)ref; CFRelease(ref);}-(void)removeFromSuperview{ NSLog(@"removeFromSuperview"); [timer invalidate]; timer = nil; [super removeFromSuperview];}- (void)dealloc { NSLog(@"dealloc"); CFRelease(gif);}- (void)stopGif{ [timer invalidate]; timer = nil;}
Three methods for loading Gif: (from network or local)
-(NSData *) loadDataForIndex :( NSInteger) index {NSData * data = nil; if (index = 0) {// Network data = [NSData dataWithContentsOfURL: [NSURL URLWithString: @ "http://s14.sinaimg.cn/mw690/005APVsyzy6MFOsVFfv5d&690"];} else {// local data = [NSData dataWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @ "run" ofType: @ "gif"];} return data ;}
1. GifView
// Third-party GIF view (to enable GIF animation playback, you can read the animation file to CGImageSourceRef and then play it with NSTimer .) //-(Id) initWithFrame :( CGRect) frame filePath :( NSString *) _ filePath; GifView * dataView = [[GifView alloc] initWithFrame: CGRectMake (0, 0,100,100) data: data]; [self. view addSubview: dataView]; // [dataView stopGif];
2. webView (no memory problems)
//webView UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 120, 100, 100)]; webView.backgroundColor = [UIColor redColor]; webView.scalesPageToFit = YES; [webView loadData:data MIMEType:@"image/gif" textEncodingName:nil baseURL:nil]; [self.view addSubview:webView];
3. Frame Animation
-(Void) runGIFForImage {UIImageView * gifImageView = [[UIImageView alloc] initWithFrame: CGRectMake (0,240,100,100)]; NSArray * gifArray = [NSArray images: [UIImage imageNamed: @ "1"], [UIImage imageNamed: @ "2"], [UIImage imageNamed: @ "3"], [UIImage imageNamed: @ "4"], [UIImage imageNamed: @ "5"], [UIImage imageNamed: @ "6"], [UIImage imageNamed: @ "7"], [UIImage imageNamed: @ "8"], [UIImage imageNamed: @ "9"], [UIImage imageNamed: @ "10"], [UIImage imageNamed: @ "11"], [UIImage imageNamed: @ "12"], [UIImage imageNamed: @ "13"], [UIImage imageNamed: @ "14"], [UIImage imageNamed: @ "15"], [UIImage imageNamed: @ "16"], [UIImage imageNamed: @ "17"], [UIImage imageNamed: @ "18"], [UIImage imageNamed: @ "19"], [UIImage imageNamed: @ "20"], [UIImage imageNamed: @ "21"], [UIImage imageNamed: @ "22"], nil]; gifImageView. animationImages = gifArray; // Animated Image array gifImageView. animationDuration = 5; // Duration Required for executing a complete animation. animationRepeatCount = 999; // Number of animation repetitions [gifImageView startAnimating]; [self. view addSubview: gifImageView];}