我下面的代码没有限制,最终会不停地进入进度视图的结尾。
我希望进度视图以1秒的间隔在10秒内移至栏的末尾。
import UIKit
class ViewController: UIViewController {
@IBOutlet var progessV : UIProgressView!
var progressValue : Float = 0
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(update), userInfo: nil, repeats: true)
}
@objc func update(){
progressValue += 0.01
progessV.progress = progressValue
}
@IBAction func reset() {
progressValue = 0
}
}
答案 0 :(得分:1)
您必须将计时器设置为1s,并将其添加到变量中,以使其在十秒后停止。
您的代码变成这样:
import UIKit
class ViewController: UIViewController {
@IBOutlet var progessV : UIProgressView!
var progressValue : Float = 0
var timer : Timer?
override func viewDidLoad() {
super.viewDidLoad()
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(update), userInfo: nil, repeats: true)
}
@objc func update(){
if (progressValue < 1)
{
progressValue += 0.1
progessV.progress = progressValue
}
else
{
timer?.invalidate()
timer = nil
}
}
@IBAction func reset() {
progressValue = 0
}
}
答案 1 :(得分:0)
您的时间间隔应为1,scheduleTimer
的文档中说:
定时器触发之间的秒数。
因此将时间间隔设置为1秒。您还需要替换:
progressValue += 0.01
具有:
progressValue += 0.1
如rmaddy所述,您还需要在适当的时间停止计时器,一种方法是使timer
成为您的类的属性,如下所示:
private var timer: Timer?
并按照您的方式对其进行初始化:
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(update), userInfo: nil, repeats: true)
在update
方法内添加适当的代码以停止计时器:
if progressValue == 1 {
timer?.invalidate()
}