iOS中的圖片UIImageView和UIImage(考慮性能問題)


UIView背景圖片設置

一般設置UIImage的方法有:

    UIImage *image = [UIImage imageNamed:fileName];//不釋放內存,要緩存

    UIImage *image = [UIImage imageWithContentsOfFile:path];//會釋放內存

本文分析對比了各種更改UIView背景的方法。當然,背景是根據一個圖片來的(非純色)。

一.加一個uiimageview在uiview上面(可以)

    UIImageView* imageView = [[UIImageView alloc] initWithFrame:view.bounds];

    imageView.image = [[UIImage imageNamed:@"name.png"] stretchableImageWithLeftCapWidth:left topCapHeight:top];

    [view addSubview:imageView];

這種方式,如果原始圖片大小不夠(小於view的大小),可以拉伸,在view釋放后也沒有什么內存保留。

 

二.通過圖片來生成UIColor設置view的backgroundColor(不推薦)

1.imageNamed方式

    view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"name.png"]];

2.contentOfFile方式

    NSString* path = [[NSBundle mainBundle] pathForResource:@"name" ofType:@"png"];

    view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageWithContentsOfFile:path];

這兩種方式都會在生成color時占用大量的內存(原始圖片的n倍,這個n可能會達到幾千的程度)。而且如果圖片大小不夠,就會按照原始大小一個一個u畫過去,也就是不會自動拉伸。1和2的區別在於,view釋放后,1中的color並不會跟着釋放,而是一直存在於內存中(當然,再次根據這個圖片生成color時並不會再次申請內存了),而2中的color就會隨着view的釋放而釋放。

三.quartzCore方式(推薦)

    UIImage *image = [UIImage imageNamed:@"name.png"];//這里推薦使用這種方式UIImage *image = [UIImage imageWithContentsOfFile:path];

    view.layer.contents = (id) image.CGImage;

    // 如果需要背景透明加上下面這句

    view.layer.backgroundColor = [UIColor clearColor].CGColor;

 

綜上,推薦第三種方式來根據圖片設置背景色。

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM