關鍵是不能直接使用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仍然是圖片文件格式。
附: