iOS UIImageView顯示網路圖片的基礎用法
阿新 • • 發佈:2019-01-21
先解釋下以下程式碼中的變數:
picsURL是一個儲存URL地址的陣列
choice是選擇圖片的索引數
self.imageView是View中的UIImageView
其實顯示一幅網路上的圖片十分簡單,如下2行程式碼即可。
UIImage *image=[UIImage imageWithData:[NSDatadataWithContentsOfURL:[NSURLURLWithString:[picsURL objectAtIndex:choice]]]];
[self.imageView setImage:image];
但是這種方法是同步獲取的,如果圖片十分大的話,介面就會卡死了,所以一般採取非同步方式來獲取,如下:
_data是一個NSMutableData
-
(
void
)connection:(
NSURLConnection
*)connection
didReceiveResponse:(
NSURLResponse
*)response{
//可以在顯示圖片前先用本地的一個loading.gif來佔位。
UIImage
*img = [[UIImage alloc] initWithContentsOfFile:@
"loading.gif"
];
[
self
.imageView
setImage:img];
_data
= [[
NSMutableData
alloc]
init];
//儲存接收到的響應物件,以便響應完畢後的狀態。
_response
= response;
}
-
(
void
)connection:(
NSURLConnection
*)connection
didReceiveData:(
NSData
*)data
{
//_data為NSMutableData型別的私有屬性,用於儲存從網路上接收到的資料。
//也可以從此委託中獲取到圖片載入的進度。
[_data
appendData:data];
NSLog
(@
"%lld%%"
,
data.length/_response.expectedContentLength * 100);
}
-
(
void
)connection:(
NSURLConnection
*)connection
didFailWithError:(
NSError
*)error{
//請求異常,在此可以進行出錯後的操作,如給UIImageView設定一張預設的圖片等。
}
-
(
void
)connectionDidFinishLoading:(
NSURLConnection
*)connection{
//載入成功,在此的載入成功並不代表圖片載入成功,需要判斷HTTP返回狀態。
NSHTTPURLResponse
*response=(
NSHTTPURLResponse
*)_response;
if
(response.statusCode
== 200){
//請求成功
UIImage
*img=[UIImage imageWithData:_data];
[
self
.imageView
setImage:img];
}
}
這樣就可以非同步來載入圖片了,提升了使用者體驗。