关键是不能直接使用UIImage,而是转成NSData来处理
- 其实,在SDWebImage这个库里有一个UIImage+GIF的类别,里面为UIImage扩展了三个方法:
@interface UIImage (GIF)
+ (IImage *)sd_animatedGIFNamed:(NSString *)name;
+ (UIImage *)sd_animatedGIFWithData:(NSData *)data;
- (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size;
@end
第二个方法试一试效果:
NSString *path = [[NSBundle mainBundle] pathForResource:@"gifTest" ofType:@"gif"];
NSData *data = [NSData dataWithContentsOfFile:path];
UIImage *image = [UIImage sd_animatedGIFWithData:data];
gifImageView.image = image;
这个方法可以试一试,不过要先拿到图片,然后再转成Data貌似有点麻烦,不过貌似SDWebImage帮我们做优化,具体如下:
加载网络的Gif文件就简单多了。最简单的方法,我们只需要使用SDWebImage 的 sd_setImageWithURL:这个方法传入Gif文件是url地址即可。
纠其原因:稍微仔细看了SDWebImage内部实现就可以清楚,大概是以下几个步骤:
1、SDWebImage根据url将Gif文件下载下来,格式为一个NSData
2、如果判断是Gif格式,则会调用** sd_animatedGIFWithData:** 将Data转换成我们需要的Gif格式
3、通过上面的方法二即可显示出Gif图片
UIImage *image = [UIImage sd_animatedGIFWithData:data];
gifImageView.image = image;
不过这里涉及一个问题就是,如何上传GIF图片到服务器了,顺便吐槽一句,这篇博客居然播放本地GIF图片比网络GIF图片要麻烦!
这篇上传,和加载显示都有了,加载显示这块,貌似也是用SDWebImage,上一篇和这一篇都提到了用sd_setImageWithURL:placeholderImage:这个方法,但是这个方法不能直接播放本地的GIF
//这篇的思路其实是挺清晰的,值得参考
GIF 分为静态GIF和动画GIF两种,扩展名为.gif。
是一种压缩位图格式。
支持透明背景图像,适用于多种操作系统,“体型”很小。
网上很多小动画都是GIF格式。其实GIF是将多幅图像保存为一个图像文件,从而形成动画,最常见的就是通过一帧帧的动画串联起来的搞笑gif图,所以归根到底GIF仍然是图片文件格式。
附: