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

Set max value on UIProgressView (swift 4)

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

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

}

你的时间间隔应该是1,scheduleTimer的文档说:

The number of seconds between firings of the timer.

所以将时间间隔设置为1秒。您还需要更换:

progressValue += 0.01

与:

progressValue += 0.1

正如 rmaddy 所提到的,您还需要在适当的时间停止计时器,一种方法是使 timer 成为您的 class 的 属性,就像这样:

private var timer: Timer?

并按照您的方式对其进行初始化:

timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(update), userInfo: nil, repeats: true)

并在 update 方法中添加合适的代码来停止计时器:

if progressValue == 1 {
    timer?.invalidate()
}

您必须将计时器设置为 1 秒,并将其添加到一个变量中,以便在到达 10 秒时停止。

你的代码变成这样:

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
}
}