在軟件開發(fā)中,從網(wǎng)絡(luò)獲取照片是必不可少的。下面兩種方法都可以從網(wǎng)絡(luò)獲取照片:
(首先說明一下,由于iOS9中新增App Transport Security(簡稱ATS)特性,簡單說就是原來請求用的HTTP要換成HTTPS,目的是更安全。但是我們請求的時(shí)候很可能用到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不能用啦,不過在info.plist文件中臨時(shí)修改設(shè)置還是可以訪問的。
那我們就把它ATS這個新要求停掉:在Xcode的info.plist文件中添加一條Dictionary類型的App Transport Security
,再給它添加一個布爾型的子節(jié)點(diǎn)Allow Aritrary Loads
,并將這個子節(jié)點(diǎn)布爾值設(shè)為 YES,就可以了)
下面正式介紹方法:
一:首選的當(dāng)然是NSData自帶方法請求到數(shù)據(jù)然后賦給ImageView,代碼如下:
//首先得拿到照片的路徑,也就是下邊的string參數(shù),轉(zhuǎn)換為NSData型。
NSData* imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:string]];
//然后就是添加照片語句,記得使用imageWithData:方法,不是imageWithName:。
UIImage* resultImage = [UIImage imageWithData: imageData];
是不是超級簡單?但是具體使用了幾次發(fā)現(xiàn)系統(tǒng)這種方法在照片多的時(shí)候特別的卡,因?yàn)樗看味家埱笳掌ㄗh使用第二種,看下面。
二:用第三方庫請求。
源代碼在GitHub上,網(wǎng)址https://github.com/rs/SDWebImage
,下載下來后把其中的SDWebImage文件夾中.h和.m頭文件導(dǎo)入你的工程,比較多,不過全導(dǎo)入功能應(yīng)該會比較完善。
然后在你需要使用照片的類頭文件中導(dǎo)入import "UIImageView+WebCache.h
和一份協(xié)議SDWebImageManagerDelegate
。OK,導(dǎo)入完成,現(xiàn)在開始使用:
//生成圖片鏈接
NSURL *picURL = [NSURL URLWithString:string];
//從網(wǎng)絡(luò)獲取照片,如果沒有就用系統(tǒng)自帶占位照片
[UIImageView sd_setImageWithURL:picURL];
//下面這個方法多了個參數(shù) placeholderImage,意思是如果沒有從網(wǎng)絡(luò)請求到數(shù)據(jù),用使用我們預(yù)先設(shè)置的這張照片。
[UIImageView sd_setImageWithURL:picURL placeholderImage:[UIImage imageNamed:@"picHolder.png"]];
上面說了系統(tǒng)的方法雖然代碼簡單,理解起來較容易,但它內(nèi)部走的方法其實(shí)不少,最最主要的問題是用起來特別的卡,建議大家使用SDWebImage,它每次加載前都會先從本地查找有沒有緩存的照片,有的話直接調(diào)用,沒有的話繼續(xù)去硬盤查找,還是沒有的話才會去請求,總體來看就是省資源,加載速度快。個人比較推薦。
OVER