swift - 异步中的 ActivityIndi​​cator - Swift

标签 swift asynchronous activity-indicator loadimage

我有大量代码 - 异步加载图像。 I am using Grand Central Dispatch , 但事件指示器不起作用。请帮我找出错误

func loadImage() {
    if let imageUrl = NSURL(string: "http://\($url)/1.jpg") {
        let imageRequest: NSURLRequest = NSURLRequest(URL: imageUrl)
        let queue: NSOperationQueue = NSOperationQueue.mainQueue()
        NSURLConnection.sendAsynchronousRequest(imageRequest, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
            if data != nil {
                self.image = UIImage(data: data)!
                self.productImageView.image = self.image

            }
        })
    }
}


override func viewDidLoad() {
    super.viewDidLoad()

    self.imageActivityIndicator.startAnimating()
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in

    self.loadImage()

    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.imageActivityIndicator.stopAnimating()
    })
    });


}

最佳答案

发生这种情况是因为您在 viewDidLoad 中使用 imageActivityIndi​​cator 并且 View 尚未添加到主视图中,因此如果您移动,您的代码是否可以工作它到 viewWillAppear 函数。

另外,当图像加载完成时,您必须隐藏它,因此这使得您的代码如下所示:

func loadImage() {
    if let imageUrl = NSURL(string: "http://skidon.info/1.jpg") {
        let imageRequest: NSURLRequest = NSURLRequest(URL: imageUrl)
        let queue: NSOperationQueue = NSOperationQueue.mainQueue()
        NSURLConnection.sendAsynchronousRequest(imageRequest, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
            if data != nil {

                self.image = UIImage(data: data)!
                self.productImageView.image = self.image

                dispatch_async(dispatch_get_main_queue(), { () -> Void in
                    self.imageActivityIndicator.stopAnimating()
                    self.imageActivityIndicator.hidden = true
                })

            }
        })
    }
}


override func viewWillAppear() {
    super.viewWillAppear()

    self.imageActivityIndicator.startAnimating()
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in

        self.loadImage()

    });


}

关于swift - 异步中的 ActivityIndi​​cator - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31909269/

相关文章:

ios - 自定义 UINavigationBar 不支持给定的高度

Swift NSScanner 不返回起始字符

ios - XCode,按下图像时显示带有计时器的文本

c# - 表单加载后取消异步操作?

xamarin - 如何在屏幕中间显示 ActivityIndi​​cator?

ios - 使用插入功能时奇怪的 tableView 动画

javascript - 如何异步填充选择控件?

perl - 如何在 Catalyst 应用程序中管理长时间运行的进程?

ios - Web View 上的加载指示器

android - 如何将加载栏添加到 View 位于另一个 Activity 中的适配器类