Skip to content

Instantly share code, notes, and snippets.

@ObjSal
Forked from andrei512/GIFLoader.h
Last active August 29, 2015 14:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ObjSal/c5dd3e61b4db5b331ba4 to your computer and use it in GitHub Desktop.
Save ObjSal/c5dd3e61b4db5b331ba4 to your computer and use it in GitHub Desktop.
GIFLoader - simple GIF support for iOS
//
// GIFLoader.h
// AnimatedGifExample
//
// Created by Andrei on 10/15/12.
// Copyright (c) 2012 Whatevra. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface GIFLoader : NSObject
+ (void)loadGIFFrom:(NSString *)url to:(UIImageView *)imageView;
+ (void)loadGIFData:(NSData *)data to:(UIImageView *)imageView;
@end
//
// GIFLoader.m
// AnimatedGifExample
//
// Created by Andrei on 10/15/12.
// Copyright (c) 2012 Whatevra. All rights reserved.
//
#import "GIFLoader.h"
#import <ImageIO/ImageIO.h>
@implementation GIFLoader
+ (void)loadGIFFrom:(NSString *)url to:(UIImageView *)imageView {
NSData *gifData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
[self loadGIFData:gifData to:imageView];
}
+ (void)loadGIFData:(NSData *)data to:(UIImageView *)imageView {
NSMutableArray *frames = nil;
CGImageSourceRef src = CGImageSourceCreateWithData((CFDataRef)data, NULL);
CGFloat animationTime = 0.f;
if (src) {
size_t l = CGImageSourceGetCount(src);
frames = [NSMutableArray arrayWithCapacity:l];
for (size_t i = 0; i < l; i++) {
CGImageRef img = CGImageSourceCreateImageAtIndex(src, i, NULL);
NSDictionary *properties = (NSDictionary *)CGImageSourceCopyPropertiesAtIndex(src, i, NULL);
NSDictionary *frameProperties = [properties objectForKey:(NSString *)kCGImagePropertyGIFDictionary];
NSNumber *delayTime = [frameProperties objectForKey:(NSString *)kCGImagePropertyGIFUnclampedDelayTime];
animationTime += [delayTime floatValue];
if (img) {
[frames addObject:[UIImage imageWithCGImage:img]];
CGImageRelease(img);
}
}
CFRelease(src);
}
[imageView setImage:[frames objectAtIndex:0]];
[imageView setAnimationImages:frames];
[imageView setAnimationDuration:animationTime];
[imageView startAnimating];
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment