首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >斯威夫特:如何使用NSProgressIndicator?

斯威夫特:如何使用NSProgressIndicator?
EN

Stack Overflow用户
提问于 2016-07-06 05:16:46
回答 2查看 11.1K关注 0票数 8

我想使用NSProgressIndicator来显示一些进展。但我找不到一种方法来增加该控件的门槛。我也没有在网上找到一个例子。

代码语言:javascript
复制
let progressbar = NSProgressIndicator()
progressbar.frame = NSRect(x: 100, y: 20, width: 150, height: 10)
progressbar.minValue = 0
progressbar.maxValue = 10
self.window.contentView?.addSubview(progressbar)

for i in 0...10 {
    progressbar.incrementBy(1)  //has no effect
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-06 06:24:29

你不可能在这样一个紧凑的循环中演示进度条。

当您设置进度指示器的值时,OS X显示机制直到下一次通过事件循环才会实际绘制差异,这直到您的方法返回之后才会发生。换句话说,在进度指示器有机会重新绘制自己之前,您就一直将其设置为10,所以您看到的只是最终的填充状态。

从理论上讲,您可以强制进度指示器在每次循环(progressbar.display())之后显示,但我认为当它们在0.01秒内发生时,您无法区分它们。

然后,解决方案是在调用incrementBy(1)之间引入一个很小的延迟,这样就可以发生下一个事件循环,并显示新值。您可以通过在代码中添加类似以下内容来实现此目的:

代码语言:javascript
复制
func delay(delay:Double, closure:()->()) {
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
        Int64(delay * Double(NSEC_PER_SEC))),
                   dispatch_get_main_queue(), closure)
}

class AppDelegate: NSObject, NSApplicationDelegate {
    @IBOutlet weak var progressIndicator: NSProgressIndicator!

    func applicationDidFinishLaunching(aNotification: NSNotification) {
        let progressbar = NSProgressIndicator()
        progressbar.frame = NSRect(x:100, y:20, width:150, height:10)
        progressbar.minValue = 0
        progressbar.maxValue = 10
        self.window.contentView?.addSubview(progressbar)

        self.progressIndicator = progressbar
        progressIndicator.indeterminate = false

        for i in 0...10 {
            delay(1.0 * Double(i), closure: { 
                self.progressIndicator.incrementBy(1)
            })
        }
    }
}

这会使incrementBy(1)的调用以1秒的间隔排队。

票数 10
EN

Stack Overflow用户

发布于 2021-02-09 19:53:03

就我的情况而言。这一进展并没有奏效。添加:

代码语言:javascript
复制
self.progress_bar.indeterminate = false;

解决问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38212874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档