.h文件
// UIImageView+GIF.h
// DemoGif
//
// Created by yidong on 15/12/5
#import
<UIKit/UIKit.h>
@interface
UIImageView (GIF)
//
从指定的路径加载
GIF
并创建
UIImageView
+ (
UIImageView
*)imageViewWithGIFFile:(
NSString
*)file frame:(
CGRect
)frame;
@end
.m文件
// UIImageView+GIF.m
// DemoGif
//
// Created by yidong on 15/12/5
#import
"UIImageView+GIF.h"
#import
<ImageIO/ImageIO.h>
@implementation
UIImageView (GIF)
+ (
UIImageView
*)imageViewWithGIFFile:(
NSString
*)file frame:(
CGRect
)frame
{
UIImageView
*imageView = [[
UIImageView
alloc
]
initWithFrame
:frame];
//
加载
gif
文件数据
NSData
*gifData = [
NSData
dataWithContentsOfFile
:file];
// GIF
动画图片数组
NSMutableArray
*frames =
nil
;
//
图像源引用
CGImageSourceRef
src =
CGImageSourceCreateWithData
((
__bridge
CFDataRef
)gifData,
NULL
);
//
动画时长
CGFloat
animationTime =
0.f
;
if
(src) {
//
获取
gif
图片的帧数
size_t
count =
CGImageSourceGetCount
(src);
//
实例化图片数组
frames = [
NSMutableArray
arrayWithCapacity
:count];
for
(
size_t
i =
0
; i < count; i++) {
//
获取指定帧图像
CGImageRef
image =
CGImageSourceCreateImageAtIndex
(src, i,
NULL
);
//
获取
GIF
动画时长
NSDictionary
*properties = (
__bridge
NSDictionary
*)
CGImageSourceCopyPropertiesAtIndex
(src, i,
NULL
);
NSDictionary
*frameProperties = [properties
objectForKey
:(
NSString
*)
kCGImagePropertyGIFDictionary
];
NSNumber
*delayTime = [frameProperties
objectForKey
:(
NSString
*)
kCGImagePropertyGIFUnclampedDelayTime
];
animationTime += [delayTime
floatValue
];
if
(image) {
[frames
addObject
:[
UIImage
imageWithCGImage
:image]];
CGImageRelease
(image);
}
}
CFRelease
(src);
}
[imageView
setImage
:[frames
objectAtIndex
:
0
]];
[imageView
setAnimationImages
:frames];
[imageView
setAnimationDuration
:animationTime];
[imageView
startAnimating
];
return
imageView;
}
@end
直接在控制器里面使用
// ViewController.m
// GIF
图片使用
#import
"ViewController.h"
#import
"UIImageView+GIF.h"
@interface
ViewController
()
@end
@implementation
ViewController
- (
void
)viewDidLoad
{
[
super
viewDidLoad
];
//
对于
gif
格式的图片
,
必须要加
@2x
NSString
*path = [[
NSBundle
mainBundle
]
pathForResource
:
@"lengtuchongbai.gif@2x"
ofType
:
@"png"
];
UIImageView
*imageView = [
UIImageView
imageViewWithGIFFile
:path
frame
:
CGRectMake
(
60
,
130
,
200
,
200
)];
[
self
.
view
addSubview
:imageView];
}
@end