要使用图像文件创建UiImage,我使用如下代码:
UIImage *aImage = [[UIImage imageNamed:@"demo.jpg"]autorelease];
如果我想创建一个包含网址http://example.com/demo.jpg的UiImage,该怎么做?
由于
更新
答案 0 :(得分:152)
这是一个三步过程。首先,您将创建一个NSURL
对象来保存我们尝试访问的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];
});
});
答案 1 :(得分:7)
以下是Swift中相同代码的样子:
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
}
}
答案 2 :(得分:0)