大佬教程收集整理的这篇文章主要介绍了Swift:如何使用NSProgressIndicator?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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 }
当您设置进度指示器的值时,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) }) } } }
以上是大佬教程为你收集整理的Swift:如何使用NSProgressIndicator?全部内容,希望文章能够帮你解决Swift:如何使用NSProgressIndicator?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。