天天看點

3. UIImageView加載圖檔注意事項

UIImageView加載圖檔注意事項

        • UIImageView 加載本地圖檔
          • UIImageView 建立的常用方法
          • UIImageView image 的三種主要填充方式
          • image 初始化本地圖檔對象注意事項
            • image .jpg和.png圖檔的問題
            • [UIImage imageNamed:] 的緩存問題/代替方法

UIImageView 加載本地圖檔

UIImageView 建立的常用方法
  1. 通過 initWithImage
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"26"]];
    [self.view addSubview: imageView];
           

這個方法雖然沒有給 imageView 設定size,卻一樣可以加載圖檔顯示出來,是因為這個方法預設會加載圖檔本身的size大小

2.通過 init

UIImageView *imageView = [[UIImageView alloc] init];
    //imageView.image = [UIImage imageNamed:@"26"];
    [imageView setImage:[UIImage imageNamed:@"26"]];
    [self.view addSubview: imageView];
           

這個方法這樣子寫卻顯示不出圖檔來的,原因是 imageView 還在沒有設定size, 就是大小都沒有,自然也就加載不出來了,還需frame才能加載出來

//imageView.frame = CGRectMake(0, 0, 120, 250);
	//這個是設定frame的另外一種方式
    imageView.frame = (CGRect){{0,0},{120,250}};
           
UIImageView image 的三種主要填充方式

紅色框範圍是imageView的位置大小

  1. 預設 UIViewContentModeScaleToFill
    3. UIImageView加載圖檔注意事項
  2. UIViewContentModeScaleAspectFit
    3. UIImageView加載圖檔注意事項
  3. UIViewContentModeScaleAspectFill
    3. UIImageView加載圖檔注意事項
    以上三種最常用最為代表,其他的不是很常用,可以根據自己設定了看看效果
image 初始化本地圖檔對象注意事項

image .jpg和.png圖檔的問題

1.如果通過 :imageNamed 建立Image對象

imageView.image = [UIImage imageNamed:@"26"]
           

a.如果圖檔是直接放在Assets.xcassets檔案下的,建立的話,不管是.jpg和.png都可以直接設定圖檔名稱即可:

imageView.image = [UIImage imageNamed:@“26”]

3. UIImageView加載圖檔注意事項

b.如果是直接放在工程檔案裡的,.jpg圖檔,就需要帶字尾才可以

imageView.image = [UIImage imageNamed:@“26.jpg”]

3. UIImageView加載圖檔注意事項

[UIImage imageNamed:] 的緩存問題/代替方法

3. UIImageView加載圖檔注意事項
3. UIImageView加載圖檔注意事項

由于imageNamed建立的圖檔對象會被加載到緩存裡,當項目大,本地圖檔過大或者圖檔較多的時候,全部使用這個方法建立圖檔顯示是不合适。

那麼還可以通過加載資源路徑的方式建立image:

NSString *imgPath = [[NSBundle mainBundle] pathForResource:@"26" ofType:@"jpg"];
    imageView.image = [UIImage imageWithContentsOfFile:imgPath];
           

注意問題:當圖檔放在Assets.xcassets的時候,你會發覺 上面這個方法傳回imgPath = nil,在安裝包的包内容裡并沒有圖檔,隻有Assets.car,

是以通過[NSBundle mainBundle] 就拿不到圖檔資源路徑,

是以,這個方法的圖檔隻能放到工程檔案裡,不能放到Assets裡邊

3. UIImageView加載圖檔注意事項

是以,一般常用的圖示就直接通過imageNamed放在緩存裡,背景圖檔等較大的和不常用的就通過imageWithContentsOfFile加載圖檔