Three methods for loading gif dynamic images and gif dynamic

Source: Internet
Author: User

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];}

 

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.