一個URL創建一個UIImage要創建一個圖像文件的UIImage的,我用下面的代碼:與iOS的
UIImage *aImage = [[UIImage imageNamed:@"demo.jpg"]autorelease];
如果我想用URL http://example.com/demo.jpg,該怎麼做創建的UIImage ?
由於
UPDATE
一個URL創建一個UIImage要創建一個圖像文件的UIImage的,我用下面的代碼:與iOS的
UIImage *aImage = [[UIImage imageNamed:@"demo.jpg"]autorelease];
如果我想用URL http://example.com/demo.jpg,該怎麼做創建的UIImage ?
由於
UPDATE
這是一個三步過程。首先,您將創建一個NSURL
對象來保存我們嘗試訪問的URL。我們將提供此URL到NSData
類的方法,+dataWithContentsOfURL:
以通過網絡獲取作爲原始數據的圖像,然後使用+imageWithData:
類方法UIImage
將數據轉換爲圖像。
NSURL *imageURL = [NSURL URLWithString:@"http://example.com/demo.jpg"];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage *image = [UIImage imageWithData:imageData];
請注意+dataWithContentsOfURL:
執行同步網絡請求。如果你在主線程上運行它,它會阻塞UI,直到從網絡接收到圖像數據。最佳做法是在後臺線程上運行任何網絡代碼。如果您的目標OS 4.0及以上版本,你可以做這樣的事情......
NSURL *imageURL = [NSURL URLWithString:@"http://example.com/demo.jpg"];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
dispatch_async(dispatch_get_main_queue(), ^{
// Update the UI
self.imageView.image = [UIImage imageWithData:imageData];
});
});
感謝您的建議,但我在將代碼放入課程時收到錯誤消息,請參閱我的更新 –
修正了錯字。第一個dispatch_async()調用中有一個額外的右括號。 –
非常感謝您的回答。 :-) – kernix
這是同樣的代碼可能看起來像雨燕什麼:
let image_url = NSURL("http://i.imgur.com/3yY2qdu.jpg")
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// do some task
let image_data = NSData(contentsOfURL: image_url!)
dispatch_async(dispatch_get_main_queue()) {
// update some UI
let image = UIImage(data: image_data!)
self.imageView.image = image
}
}
在Xcode 9中,異步調度的首選Swift語法是'DispatchQueue.global(qos:.default).async {// block}' – atineoSE
可能想看看這個項目:https://github.com/rs/SDWebImage – Intentss