在iOS中使用URL创建UIImage

时间:2011-10-08 01:28:36

标签: objective-c ios uikit uiimage

要使用图像文件创建UiImage,我使用如下代码:

UIImage *aImage = [[UIImage imageNamed:@"demo.jpg"]autorelease];

如果我想创建一个包含网址http://example.com/demo.jpg的UiImage,该怎么做?

由于

更新

enter image description here

3 个答案:

答案 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)

对于想要从网上加载图片的任何人,以下图书馆可能会有所帮助:

https://github.com/rs/SDWebImage

它是UIImageView类别,用于处理来自网址的异步加载和图像缓存。