在循环期间更新进度条

Posted

技术标签:

【中文标题】在循环期间更新进度条【英文标题】:Updating progress bar during loop 【发布时间】:2017-01-17 18:07:30 【问题描述】:

我有两个控制器。首先,我有一个进度条,并且有一个获取数据和循环的请求。我需要在循环期间更新第一个控制器上的栏。问题是即使它不更新循环,斜杠也只会在方法执行完成时更新。

第一视图:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) 
    for i in 0 ..< JSON.count 

        autoreleasepool
            count = count + 1
            if count >= percentage 
                progress = progress + 1
                //This notification executes the method that makes the update in the first view
                NSNotificationCenter.defaultCenter().postNotificationName("ProgressNotification", object: nil, userInfo: ["label":"Clientes", "progress" : progress])
                count = 0
            
        

    

第二视图:

//更新工具栏的方法

func addProgress(notification:NSNotification)
    dispatch_async(dispatch_get_main_queue()) 
        self.progressBar.setProgress(CGFloat.init(notification.userInfo!["progress"] as! Int), animated: true)
        self.progressLabel.text = notification.userInfo!["label"] as? String
    

【问题讨论】:

【参考方案1】:

我不确定您是否经常切换线程以及绕过通知服务。但是,您应该将进度设置为 0.0 到 1.0 之间的浮点数。 您正在做的是将 int 值从 1 转换为 JSON.count 以浮动。因此,您的进度值始终为 1.0 或更高。

最好使用.setProgress(CGFloat.init(JSON.count) / CGFloat.init(i)) 之类的东西。

两者都做,将整数转换为浮点数,并确保除法是浮点除法而不是整数除法。 (整数除法将评估为 0 或 1 或更多,但注意介于两者之间。)

【讨论】:

以上是关于在循环期间更新进度条的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSFileManager 在复制文件期间更新进度条

如何循环更新进度条?

使用 WCF Duplex 回调更新 JQuery 进度条?

数据导入CoreData期间如何显示progressBar?

mfc编写一个flash播放器slider进度条的程序,在新建线程中,怎么实现进度条的更新

AsyncTask 和进度条 [重复]