在軟件開發中,從網絡獲取照片是必不可少的。下面兩種方法都可以從網絡獲取照片:
(首先說明一下,由于iOS9中新增App Transport Security(簡稱ATS)特性,簡單說就是原來請求用的HTTP要換成HTTPS,目的是更安全。但是我們請求的時候很可能用到http,直接請求http的話,控制臺會打印一條消息:
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
意思大概就是http不能用啦。
那我們就把它ATS這個新要求停掉:在Xcode的info.plist文件中添加一條Dictionary類型的App Transport Security,再給它添加一個布爾型的子節點Allow Aritrary Loads,并將這個子節點布爾值設為 YES,就可以了)
1019712-222ec0e739d1e3d3.png
下面正式介紹方法:
一:首選的當然是Xcode自帶,代碼超簡單:
//首先得拿到照片的路徑,也就是下邊的string參數,轉換為NSData型。
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:string]];
//然后就是添加照片語句,這次不是`imageWithName`了,是 imageWithData。
UIImageView.image = [UIImage imageWithData:data];
```
是不是超級簡單?但是具體使用了幾次發現系統這種方法在照片多的時候特別的卡,因為它每次都要請求照片,建議使用第二種,看下面。
二:用第三方庫請求。
源代碼在GitHub上,網址https://github.com/rs/SDWebImage
,下載下來后把其中的SDWebImage文件夾中.h和.m頭文件導入你的工程,比較多,不過全導入功能應該會比較完善。然后在你需要使用照片的類頭文件中導入import "UIImageView+WebCache.h
和一份協議SDWebImageManagerDelegate
。OK,導入完成,現在開始使用:
```
//生成圖片鏈接
NSURL *picURL = [NSURL URLWithString:string];
//從網絡獲取照片,如果沒有就用系統自帶占位照片
[UIImageView sd_setImageWithURL:picURL];
//下面這個方法多了個參數 placeholderImage,意思是如果沒有從網絡請求到數據,用使用我們預先設置的這張照片。
[UIImageView sd_setImageWithURL:picURL placeholderImage:[UIImage imageNamed:@"picholder.png"]];
```
上面說了系統的方法雖然代碼簡單,理解起來較容易,但它內部走的方法其實不少,最最主要的問題是用起來特別的卡,建議大家使用第三方類,這個第三方類每次加載前都會先從本地查找有沒有緩存的照片,有的話直接調用,沒有的話才會去請求,總體來看就是省資源,加載速度快。個人比較推薦。