在UIProgressView上设置最大值(Swift 4)

时间:2018-07-12 20:10:33

标签: ios swift swift4 intervals uiprogressview

我下面的代码没有限制,最终会不停地进入进度视图的结尾。

我希望进度视图以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
    }

}

2 个答案:

答案 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()
}