Swift - 创建进度条

问题描述 投票:0回答:2

嗨,我正在使用此代码来尝试根据时间制作进度条动画。

  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 
ios swift uiprogressview
2个回答
7
投票

除非另有说明,否则 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) .


0
投票

我创建了一个 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!

}

© www.soinside.com 2019 - 2024. All rights reserved.