Swift:如何使用NSProgressIndicator?

Swift:如何使用NSProgressIndicator?,第1张

概述我想使用NSProgressIndicator来显示一些进展.但我找不到一种方法来增加控制的范围.我也没有在网上找到一个例子. let progressbar = NSProgressIndicator()progressbar.frame = NSRect(x: 100, y: 20, width: 150, height: 10)progressbar.minValue = 0progr 我想使用nsprogressIndicator来显示一些进展.但我找不到一种方法来增加控制的范围.我也没有在网上找到一个例子.

let progressbar = nsprogressIndicator()progressbar.frame = NSRect(x: 100,y: 20,wIDth: 150,height: 10)progressbar.minValue = 0progressbar.maxValue = 10self.window.contentVIEw?.addSubvIEw(progressbar)for i in 0...10 {    progressbar.incrementBy(1)  //has no effect}
解决方法 您将无法在如此紧凑的循环中演示进度条.

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

理论上,你可以在每次循环之后强制显示进度指示器(progressbar.display()),但我认为你不能区分它们在0.01秒内发生的差异.

然后,解决方案是在调用incrementBy(1)之间引入一个小延迟,以便可以发生下一个事件循环并且将显示新值.您可以通过在代码中添加以下内容来实现:

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秒间隔.

总结

以上是内存溢出为你收集整理的Swift:如何使用NSProgressIndicator?全部内容,希望文章能够帮你解决Swift:如何使用NSProgressIndicator?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1007239.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存