SDWebImage 加载gif图的原理
gif图片显示
gif图片是一帧一帧的图片组成, 相当于一个相册图片集合。通过这些图片的显示时间, 可以组成一个动画。
核心方法
传入gif图片的数据data, 返回交给imageView就可以动画显示gif图片了
- (UIImage )sd_animatedGIFWithData:(NSData )data
过程分析
获取数据源, 以后可以通过这个源头获得 某一帧的 数据和时间等
CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL);获得图片的帧数 size_t count = CGImageSourceGetCount(source);
- 通过duration = duration + [self sd_frameDurationAtIndex:i source:source]; 方法可以获得总的帧动画时间, 内部通过每一帧的帧字典可以获得每一个的时间, 通过累加 得到总的事件duration
- animatedImage = [UIImage animatedImageWithImages:images duration:duration]; 通过这个方法返回一个处理过后的image, 可以直接显示动画了
细节处理
没有传入data
- (UIImage )sd_animatedGIFWithData:(NSData )data {
if (!data) {
}return nil;
属性时间获取失败
- if (!duration) {
duration = (1.0f / 10.0f) * count; }