iOS根據網絡圖片的size大小設置UIImageView的大小


有時候在設置UIImageView的大小時候需要根據UIimage的長寬比來自動設置,不讓圖片原比例失真。

如果是從本地獲取到的圖片,[UIImage imageNamed:@""];

這樣就可以拿到image了,從而獲取到image的size。但大多數時候我們都是網絡請求拿到的圖片,

我們需要

NSData *data = [NSData dataWithContentsOfURL:url];

image = [UIImage imageWithData:data];

這樣來得到image,但是在網絡慢的情況下,這種同步的請求可能會讓線程卡住。

一般情況下我們都是使用SDWebImage這個第三方來加載圖片的。但都是用UIimageView來調Sd_webImage 這樣的方法直接設置,而不是拿到image后再去設置UIimageView的image,這樣我們就沒辦法先得到size設置好UIimageView的大小再去設置image。

 

在網上找到一個方法解決了這個問題,就是在SDWebImage 中有一個獲取緩存的方法,先判斷SDWebImage有沒有緩存這個圖片,有的話就獲取,沒有再使用

NSData *data = [NSData dataWithContentsOfURL:url];

image = [UIImage imageWithData:data];

來獲取

 

代碼如下,

//顯示單張圖片時,固定寬度。

 

    __block CGFloat itemW = 200;

    __block CGFloat itemH = 0;

    if (_photoDataArray.count == 1) {

    

        UIImageView * imageView = [[UIImageView alloc] init];

        NSURL * url = [NSURL URLWithString:_photoDataArray.firstObject];

        [imageView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeHolder.jpg"]];

        SDWebImageManager *manager = [SDWebImageManager sharedManager];

        BOOL existBool = [manager diskImageExistsForURL:url];//判斷是否有緩存

        UIImage * image;

        if (existBool) {

            image = [[manager imageCache] imageFromDiskCacheForKey:url.absoluteString];

        }else{

            NSData *data = [NSData dataWithContentsOfURL:url];

            image = [UIImage imageWithData:data];

        }

        

        //根據image的比例來設置高度

        if (image.size.width) {

            itemH = image.size.height / image.size.width * itemW;

            

            if (itemH >= itemW) {

                itemW = 120;

                itemH = image.size.height / image.size.width * itemW;

            }

        }


免責聲明!

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



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