嗨,我正在使用此代码来尝试根据时间制作进度条动画。
import UIKit
class LoadingScreen: UIViewController {
@IBOutlet var progressView: UIProgressView!
override func viewDidLoad() {
super.viewDidLoad()
var time = 0.0
var timer: NSTimer
timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector:Selector("setProgress"), userInfo: nil, repeats: true)
func setProgress() {
time += 0.1
progressView.progress = time / 3
if time >= 3 {
timer.invalidate()
}
}
但是我收到一个错误:无法将 double 类型的值签名为 float 类型的值。
编辑:
错误在这一行:
progressView.progress = time / 3
除非另有说明,否则 swift 编译器假定 0.0 的 Double 类型推断 - 声明为
var time : Float = 0.0
参考 - https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html - Swift 在推断浮点数类型时始终选择 Double(而不是 Float) .
我创建了一个 EggTimer 应用程序,在其中使用进度条。这里提供一下我的解决方案,大家可以参考一下
import UIKit
ViewController 类:UIViewController {
let eggTimes = ["Soft": 5, "Medium": 7, "Hard": 12]
var secondsRemaining = 0
var timer: Timer?
var totalDuration: Float = 0.0
@IBAction func hardnessSelected(_ sender: UIButton) {
let hardness = (sender.currentTitle!)
secondsRemaining = (eggTimes[hardness]!)
totalDuration = Float(secondsRemaining)
progressView.progress = 0.0
self.displayText.text = "How do you like your eggs?"
if(timer != nil){
timer?.invalidate()
}
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { (Timer) in
if self.secondsRemaining > 0 {
print ("\(self.secondsRemaining) seconds")
let progress = (self.totalDuration - Float(self.secondsRemaining)) / self.totalDuration
self.progressView.progress = progress
self.secondsRemaining -= 1
} else {
Timer.invalidate()
self.progressView.progress = 1.0
self.displayText.text = "DONE!"
}
}
}
@IBOutlet weak var progressView: UIProgressView!
@IBOutlet weak var displayText: UILabel!
}