什么是GIF
GIF(Graphics Interchange Format)的原義是“圖像互換格式”,是CompuServe公司在 1987年開發(fā)的圖像文件格式。GIF文件的數(shù)據(jù),是一種基于LZW算法的連續(xù)色調(diào)的無損壓縮格式。其壓縮率一般在50%左右,它不屬于任何應(yīng)用程序。目前幾乎所有相關(guān)軟件都支持它,公共領(lǐng)域有大量的軟件在使用GIF圖像文件。GIF圖像文件的數(shù)據(jù)是經(jīng)過壓縮的,而且是采用了可變長度等壓縮算法。GIF格式的另一個(gè)特點(diǎn)是其在一個(gè)GIF文件中可以存多幅彩色圖像,如果把存于一個(gè)文件中的多幅圖像數(shù)據(jù)逐幅讀出并顯示到屏幕上,就可構(gòu)成一種最簡單的動(dòng)畫。(百度百科)
iOS中GIF圖片顯示
iOS中最常用的圖片顯示控件是UIImageView
,最簡單的代碼示例如下:
let imageView = UIImageView(frame: CGRect.zero)
let url = NSBundle.mainBundle().pathForResource("cat", ofType: "gif")!
let image = UIImage(contentsOfFile: url)
imageView.image = image
但是當(dāng)我們這么做的時(shí)候發(fā)現(xiàn)GIF并沒有動(dòng)起來,而是取了第一幀做靜態(tài)圖片.那么怎么解決呢?最簡單的方法是利用UIImageView
的animationImages
,或者利用UIImage
的animatedImageWithImages(images:, duration: )
來獲取動(dòng)態(tài)的圖片.那么難點(diǎn)就在于拆解GIF為一組圖片.這時(shí)候就需要用到ImageIO
的一個(gè)簡單的拆分功能了,代碼如下:
let url = NSBundle.mainBundle().pathForResource("cat", ofType: "gif")!
let data = NSData(contentsOfFile: url)!
let src = CGImageSourceCreateWithData(data, nil)!
var images = [UIImage]()
let count = CGImageSourceGetCount(src)
for index in 0..<count {
let cgImage = CGImageSourceCreateImageAtIndex(src, index, nil)
images.append(UIImage(CGImage: cgImage!))
}
在之后就非常簡單了,如利用UIImage
的動(dòng)態(tài)圖片獲取方法:
imageView.image = UIImage.animatedImageWithImages(images, duration: 0.25)
再如直接使用UIImageView
設(shè)置一組動(dòng)態(tài)圖:
imageView.animationImages = images
imageView.animationDuration = 1.0/30.0 // 默認(rèn)1/圖片數(shù)量
imageView.animationRepeatCount = 10 // 默認(rèn) 0(無限)