動(dòng)圖大家都會(huì)想到gif圖片飒房,但是在iOS端不能夠播放gif格式圖片怎么辦呢。葱轩。睦焕。
其實(shí)蘋(píng)果為開(kāi)發(fā)者提供的控件足以讓圖片動(dòng)起來(lái),下面我選其中的一種使用UIImageView讓圖片動(dòng)起來(lái)靴拱。垃喊。。
播放動(dòng)圖其實(shí)就是有許多張圖片讓他一張一張顯示出來(lái)袜炕,在mac系統(tǒng)下打開(kāi)gif格式圖片就會(huì)看到本谜,一張一張的圖片,我們使用UIImageView播放圖片其實(shí)就是讓圖片以動(dòng)畫(huà)的形式一張一張的播放出來(lái)偎窘;
使用UIImageView播放動(dòng)圖需要用到這些屬性:
animationImages指向了NSArray說(shuō)明這個(gè)就是存放所有需要播放的圖片的數(shù)組乌助;
animationDuration這個(gè)就是控制圖片播放時(shí)間的屬性;
animationRepeatCount這個(gè)是動(dòng)畫(huà)循環(huán)次數(shù)陌知,默認(rèn)是0,不循環(huán)他托;
這是需要用到的方法:
startAnimating方法是開(kāi)始播放圖片;
stopAnimating方法是結(jié)束播放圖片仆葡;
isAnimating方法是判斷圖片是不是在播放赏参;
下面直接上代碼:
@property (nonatomic, strong)UIImageView *imageView;
首先創(chuàng)建存放圖片的數(shù)組,并把圖片存放到可變數(shù)組中:
NSMutableArray *tempArr = [NSMutableArray array];
for (int i = 0; i < count; i ++) {
//從bundle中獲取的無(wú)緩存(圖片所占用的內(nèi)存會(huì)在一些特定操作后清除)
//behavior是定義的宏沿盅,是圖片名字(例:head_01.jpg)
NSString *strImage = [NSString stringWithFormat:@"%@_%02d.jpg",behavior,i];
UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:strImage ofType:nil]];
[tempArr addObject:image];
}
//把存放圖片的數(shù)組傳給UIImageView的播放動(dòng)畫(huà)的數(shù)組
self.imageView.animationImages = tempArr;
//設(shè)置動(dòng)畫(huà)播放時(shí)間
self.imageView.animationDuration = 5.0f;
//設(shè)置動(dòng)畫(huà)連續(xù)播放次數(shù)
self.imageView.animationRepeatCount = 1;
//開(kāi)始播放動(dòng)圖
[self.imageView startAnimating];
//此時(shí)完事把篓,但是有一個(gè)致命性問(wèn)題,你看一下內(nèi)存使用情況腰涧,已經(jīng)要爆了吧纸俭,下面就是內(nèi)存優(yōu)化問(wèn)題了
//當(dāng)動(dòng)畫(huà)播放結(jié)束時(shí)延遲一秒我們釋放掉self.imageView.animationImages的image對(duì)象
[self.imageView performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.imageView.animationDuration + 1.0f];
補(bǔ)充:如果使用bundle獲取圖片幀不要把圖片拖到Assets.xcassets中獲取,因?yàn)閎undle獲取的是當(dāng)前程序可執(zhí)行文件所在的目錄下南窗,而Assets.xcassets中得圖片在編譯時(shí)會(huì)被打包成Assets.car文件(想要獲取Assets.xcassets中圖片必須使用[UIImage imageNamed:]加載)揍很。