我有一个集合视图控制器,它通过URL加载图像异步。
(类似Instegram的东西)
我正在寻找实现装载图像部分的最佳方法。
请告诉我你觉得怎么样
(类似Instegram的东西)
我正在寻找实现装载图像部分的最佳方法。
请告诉我你觉得怎么样
第一种方式 – 没有任何外部图书馆:
let downloadQueue = dispatch_queue_create("com.pro.asyncImages",nil) dispatch_async(downloadQueue){ var data = NSData(contentsOfURL: NSURL(string: pictureUrl!)!) var image: UIImage? if (data != nil){ image = UIImage(data: data!) } dispatch_async(dispatch_get_main_queue()){ uiImageView.image = image } }
第二种方法 – 使用Alamofire(请求属于Alamofire)
if let mediaUrl = info.mediaUrl { request(.GET,mediaUrl).response(){ (_,_,data,_) in let image = UIImage(data: data! as NSData) imageView.image = image } }
最后,我读到AFNetworking,正在将url异步加载到urlImage中做得很好,这是我想要做的。
AFNetworking对于这项任务更好吗? (然后Alamofire)
如果没有,我不明白如何添加AFNetworking到我的快速项目,除了添加#import“AFNetworking.h”我需要添加哪些文件?
请说明哪种方法是最好的,我的需求是表现,指责,缓存。
视图采集控制器像Instegram一样运行,并且正在加载图像,同时向下滚动。
我希望我对我所需要的很清楚,
谢谢
作者在Alamofire
README.md中提到:
When should I use AFNetworking?
- UIKit extensions,such as asynchronously loading images to UIImageView
所以回答你的问题:
So is AFNetworking is better for this task?
是!
但是,如果仍然要使用香草Alamofire项目,可以通过以下方式获取图像:
Alamofire.request(.GET,"https://robohash.org/123.png").response { (request,response,error) in self.myImageView.image = UIImage(data: data,scale:1) }
附:
但是,如果您只想加载映像(当然异步) – 您根本不需要使用Alamofire或AFNetworking。
只需在代码中添加这个小扩展名:
extension UIImageView { public func imageFromUrl(urlString: String) { if let url = NSURL(string: urlString) { let request = NSURLRequest(URL: url) NSURLConnection.sendAsynchronousRequest(request,queue: NSOperationQueue.mainQueue()) { (response: NSURLResponse!,data: NSData!,error: NSError!) -> Void in self.image = UIImage(data: data) } } } }
并使用它:
myImageView.imageFromUrl("https://robohash.org/123.png")