我們?cè)谑褂肬IImageView幀動(dòng)畫時(shí)會(huì)碰到加載到內(nèi)存的圖片不會(huì)自動(dòng)釋放,占用很多的內(nèi)存,這時(shí)我們可能使用 :
[UIImage imageWithContentsOfFile:xxx.png]
并配合
imageView.animationImages = nil;
來清理不用的緩存動(dòng)畫圖片。
具體如下:
UIImageView幀動(dòng)畫相關(guān)屬性和方法:
需要播放的序列幀圖片數(shù)組(里面都是UIImage對(duì)象,會(huì)按順序顯示里面的圖片)
@property(nonatomic,copy) NSArray *animationImages;
幀動(dòng)畫的持續(xù)時(shí)間
@property(nonatomic) NSTimeInterval animationDuration;
幀動(dòng)畫的執(zhí)行次數(shù)(默認(rèn)是無限循環(huán))
@property(nonatomic) NSInteger animationRepeatCount;
開始執(zhí)行幀動(dòng)畫
- (void)startAnimating;
停止執(zhí)行幀動(dòng)畫
- (void)stopAnimating;
是否正在執(zhí)行幀動(dòng)畫
- (BOOL)isAnimating;
例:加載動(dòng)畫圖片的方式
1.加載所有的動(dòng)畫圖片
NSMutableArray *images = [NSMutableArray array];
for (int i = 0; i<10 i++){
// 計(jì)算文件名
NSString *filename = [NSString stringWithFormat:@"%@_d.jpg", name, i];
[images addObject:filename];
}
// 加載圖片
// imageNamed: 有內(nèi)存緩存直到程序退出才釋放 (傳入文件名)
// UIImage *image = [UIImage imageNamed:filename];
// imageWithContentsOfFile: 沒有緩存,自動(dòng)釋放(傳入文件的全路徑)
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:filename ofType:nil];
UIImage *image = [UIImage imageWithContentsOfFile:path];
// 添加圖片到數(shù)組中
[images addObject:image];
self.imageView.animationImages = images;
2.設(shè)置播放次數(shù)(1次)
self.imageView.animationRepeatCount = 1;
3.設(shè)置播放時(shí)間
self.imageView.animationDuration = images.count * 0.05;
[self.imageView startAnimating];
4.動(dòng)畫放完1秒后清除內(nèi)存
CGFloat delay = self.imageView.animationDuration;
// setAnimationImages: 方法也就是步驟一的代碼
[self.imageView performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:delay];