在iOS中使用URL创buildUIImage

要创build一个图像文件的UiImage,我使用如下代码:

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

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

谢谢

UPDATE

在这里输入图像说明

这是一个三步过程。 首先你将创build一个NSURL对象来保存我们试图访问的URL。 我们将把这个URL提供给NSData类的方法+dataWithContentsOfURL:通过networking获得原始数据的图像,然后在UIImage上使用+imageWithData: class方法将数据转换成图像。

 NSURL *imageURL = [NSURL URLWithString:@"http://example.com/demo.jpg"]; NSData *imageData = [NSData dataWithContentsOfURL:imageURL]; UIImage *image = [UIImage imageWithData:imageData]; 

请注意+dataWithContentsOfURL:执行同步networking请求。 如果你在主线程上运行这个function,它将会阻塞用户界面,直到从networking接收到图像数据为止。 最佳做法是在后台线程上运行任何networking代码。 如果你的目标是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]; }); }); 

以下是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 } } 

对于任何想从networking上下载图片的人来说,以下的图书馆可能会有帮助:

https://github.com/rs/SDWebImage

这是一个UIImageView类,它处理来自url的asynchronous加载和图像caching。