当图像通过 contentsOfURL 同步下载时开始动画 UIActivityIndi​​cator

Posted

技术标签:

【中文标题】当图像通过 contentsOfURL 同步下载时开始动画 UIActivityIndi​​cator【英文标题】:Start animating UIActivityIndicator when image downloads throug contentsOfURL synchronous 【发布时间】:2016-07-03 07:01:04 【问题描述】:

我试图在图像开始下载时显示UIActivityIndicator,并且它会动画直到所有图像都下载完毕。 但是UIActivityIndicator 不是动画,当所有图像都下载时它会动画。我发现contentsOfURL 是同步方法并阻塞了主线程。我想使用contentsOfURL 下载图像。任何人都知道如何在图像开始下载时为UIActivityIndicator 设置动画? 谢谢

var indeX = 0  
var imageArrayNsData : [NSData] = []
var posts = NSMutableArray()

myActivityIndicator.startAnimating()
self.view.addSubview(myActivityIndicator)
self.view.userInteractionEnabled = false

for _ in posts.valueForKey("enclosure") as! [NSString]
    let picURL = self.posts.objectAtIndex(indeX).valueForKey("enclosure") as! String
    let url = NSURL(string: picURL)
    let data = NSData(contentsOfURL: url!)
    let IMG = UIImage(data: data!)
    let dtA : NSData = NSData(data: UIImagePNGRepresentation(IMG!)!)
    print("download")
    imageArrayNsData.append(dtA)
    indeX++
    print(indeX)
                   
self.view.userInteractionEnabled = true
myActivityIndicator.stopAnimating()

【问题讨论】:

请发布完整代码 不要在主线程同步下载。这从来都不是正确的事情。永远。 不使用DispatchAlamofireImage库从URL下载Asynchronously图像的简单方法是什么?谢谢 @ZAFAR007 使用 NSURLSession。 SO上有很多examples。 【参考方案1】:

要异步执行此操作,您必须使用dispatch。事实上,AlamofireImage 也使用 dispatch 来处理它。

在我看来,您可以将代码放入队列用户初始调度中,并在完成 myActivityIndicatorself.view.userInteractionEnabled 后更新主队列

dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.rawValue), 0))  
  //your download code here

  dispatch_async(dispatch_get_main_queue()) 
    self.view.userInteractionEnabled = true
    myActivityIndicator.stopAnimating()
     

【讨论】:

Value of type 'qos_class_t' has no member 'value' 对不起,在swift 2 中改为QOS_CLASS_USER_INITIATED.rawValue 你能告诉我如何在 ios 7.0 上使用它,因为它只在 ios 8 中可用。谢谢 你能把你在编辑之前写的代码发给我吗? 嘿,编辑前的代码只是没有.rawValueQOS_CLASS_USER_INITIATED.value 也是如此

以上是关于当图像通过 contentsOfURL 同步下载时开始动画 UIActivityIndi​​cator的主要内容,如果未能解决你的问题,请参考以下文章

ios将图像上传到Firebase但是当我尝试下载时却不是这样吗?

.NET 图像处理程序在下载时剥离文件类型

删除 iCloud Drive 文件时删除本地文件

如何通过 JavaScript 保存图像

看起来 String 类型不再提供 contentsOfURL 初始化程序(在 Xcode 7 更新之后)?

通过 Flutter App 的 PreSigned URL 将文件上传到 S3。但是当我下载它时文件已损坏