当图像通过 contentsOfURL 同步下载时开始动画 UIActivityIndicator
Posted
技术标签:
【中文标题】当图像通过 contentsOfURL 同步下载时开始动画 UIActivityIndicator【英文标题】: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()
【问题讨论】:
请发布完整代码 不要在主线程同步下载。这从来都不是正确的事情。永远。 不使用Dispatch
和AlamofireImage
库从URL
下载Asynchronously
图像的简单方法是什么?谢谢
@ZAFAR007 使用 NSURLSession。 SO上有很多examples。
【参考方案1】:
要异步执行此操作,您必须使用dispatch
。事实上,AlamofireImage
也使用 dispatch 来处理它。
在我看来,您可以将代码放入队列用户初始调度中,并在完成 myActivityIndicator
和 self.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 中可用。谢谢
你能把你在编辑之前写的代码发给我吗?
嘿,编辑前的代码只是没有.rawValue
。 QOS_CLASS_USER_INITIATED.value
也是如此以上是关于当图像通过 contentsOfURL 同步下载时开始动画 UIActivityIndicator的主要内容,如果未能解决你的问题,请参考以下文章
ios将图像上传到Firebase但是当我尝试下载时却不是这样吗?