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

标签 ios swift uiactivityindicatorview

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

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 也使用 dispatch 来处理它。

在我看来,您可以将代码分配给队列用户初始值,并在完成 myActivityIndi​​catorself.view.userInteractionEnabled 后更新主队列。/p>

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()
   }  
}

关于ios - 当通过 contentOfURL 同步下载图像时开始动画 UIActivityIndi​​cator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38167511/

相关文章:

ios - 如何显示带有事件指示器的警报 View ?

ios - 无法通过 Storyboard 动画化事件指示器

ios - 从外部函数 Swift 访问常量

ios - MKMapView 的状态恢复稍微缩小

ios - 下载 Gifv 文件以在 Swift 中的 AVPlayer 中使用

swift - 我想在扩展中使用开关

ios - 带正文的 Alamofire 发布请求

ios - 关闭常见任务的最佳方法是什么

xcode - 如何初始化相互依赖的属性

ios - 如何在 UITableViewController 中显示 UIActivityIndi​​catorView?