UIProgressView无法按预期与NSTimer一起工作 - Swift
问题描述:
我正在使用NSTimer
来让用户知道该应用程序正在工作。进度条设置为持续3秒,但在运行时,它会以“滴答”的动作显示,并且不像应该那样平滑。无论如何,我可以让它更平滑 - 我相信我只是一个计算错误。UIProgressView无法按预期与NSTimer一起工作 - Swift
下面是代码:
import UIKit
class LoadingScreen: UIViewController {
var time : Float = 0.0
var timer: NSTimer?
@IBOutlet weak var progressView: UIProgressView!
override func viewDidLoad() {
super.viewDidLoad()
// Do stuff
timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector:Selector("setProgress"), userInfo: nil, repeats: true)
} //close viewDidLoad
func setProgress() {
time += 0.1
progressView.progress = time/3
if time >= 3 {
timer!.invalidate()
}
}
}
答
按照苹果iOS SDK文档,你可以通过使用下一个API的实现它:
func setProgress(_ progress: Float, animated animated: Bool)
它调整由接收器显示的当前进度,可选择对变化进行动画处理。
参数:progress
- 新的进度值。
animated
- true
如果更改应该动画,false
如果更改应该立即发生。在此
所以你的情况,你应该做这样的:
func setProgress() {
time += 0.1
dispatch_async(dispatch_get_main_queue()) {
progressView.setProgress(time/3, animated: true)
}
if time >= 3 {
timer!.invalidate()
}
}
同时请注意,这是执行上的主UI更新一个很好的做法线程,所以我只是在主队列上派发进度更新。
希望它能帮助你。
感谢您的回复 我想你没有正确地得到我的问题。我的进度也很好,动画也是 –