在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。