在iOS中使用URL创建UIImage

Cha*_*ung 47 objective-c uikit uiimage ios

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

UIImage *aImage = [[UIImage imageNamed:@"demo.jpg"]autorelease];
Run Code Online (Sandbox Code Playgroud)

如果我想用URL http://example.com/demo.jpg创建一个UiImage,该怎么做?

谢谢

UPDATE

在此输入图像描述

Mar*_*ams 152

这是一个三步过程.首先,您将创建一个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];
Run Code Online (Sandbox Code Playgroud)

请注意,+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];
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的建议,但在将代码放入课程时收到错误消息,请参阅我的更新 (2认同)

Dav*_*iss 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
    }
}
Run Code Online (Sandbox Code Playgroud)