代码之家  ›  专栏  ›  技术社区  ›  Kristofer Mar Einarsson

使用Xcode中的滑块创建倒计时手表

  •  0
  • Kristofer Mar Einarsson  · 技术社区  · 7 年前

    大家好,我需要帮助。

    我试图创造一个倒计时手表可以倒计时从小时,分钟和秒。现在我只能创建秒的倒计时,但我希望应用程序能够更新秒,分钟和小时,当我与滑块“滑动”。我发现很难正确更新标签并在应用程序中添加“小时和分钟”。谁能帮我弄清楚逻辑吗。

    这是我到目前为止编写的代码,只需几秒钟即可正常工作。。我还添加了一个音频文件,您可以在代码中看到,它将在最后播放。

    class ViewController: UIViewController {
    
    var secondsCount = 30;
    var timer = Timer()
    var audioPlayer = AVAudioPlayer()
    
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var labelmin: UILabel!
    
    
        // Slideren som slider tid for sal 1
    @IBOutlet weak var sliderOutlet: UISlider!
    @IBAction func slider(_ sender: UISlider)
    {
        //Live changes the numbers
        secondsCount = Int(sender.value)
        label.text = String(secondsCount) + " Seconds"
    
    }
    
    
        //Start button
    @IBOutlet weak var startOutlet: UIButton!
    @IBAction func start(_ sender: Any)
    {
            //Nederstående kode aktiverer funktionen counter()
        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.counter), userInfo: nil, repeats: true)
    
        sliderOutlet.isHidden = true
        startOutlet.isHidden = true
    }
    
        //Counter function
    func counter() {
        secondsCount -= 1
    
        label.text = String(secondsCount) + " Seconds"
    
        if (secondsCount == 0)
        {
            timer.invalidate()
    
            audioPlayer.play()
        }
    }
    
        //Stop button
    @IBOutlet weak var stopOutlet: UIButton!
    @IBAction func stop(_ sender: Any)
    {
        timer.invalidate()
        secondsCount = 30
        sliderOutlet.setValue(30, animated: true)
        label.text = "30 Seconds"
    
        audioPlayer.stop()
    
        sliderOutlet.isHidden = false
        startOutlet.isHidden = false
    }
    
    
        // viewDidLoad
    
    override func viewDidLoad()
    {
        super.viewDidLoad()
    
        do
        {
            let audioPath = Bundle.main.path(forResource: "1", ofType: ".mp3")
    
            try audioPlayer = AVAudioPlayer(contentsOf: URL(fileURLWithPath: audioPath!))
    
        }
        catch
        {
            //ERROR
        }
    
    
    
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   DonMag    7 年前

    这是 将秒数转换为格式化的小时、分钟、秒字符串的方法:

    func hmsFromSecondsFormatted(seconds: Int) -> String {
    
        let h = seconds / 3600
        let m = (seconds % 3600) / 60
        let s = seconds % 60
    
        var newText = ""
    
        if h > 0 {
            newText += "\(h)"
            if h == 1 {
                newText += " hour, "
            } else {
                newText += " hours, "
            }
        }
    
        if m > 0 || h > 0 {
            newText += "\(m)"
            if m == 1 {
                newText += " minute, "
            } else {
                newText += " minutes, "
            }
        }
    
        newText += "\(s)"
        if s == 1 {
            newText += " second"
        } else {
            newText += " seconds"
        }
    
        return newText
    
    }
    

    然后你可以这样使用它:

    label.text = hmsFromSecondsFormatted(secondsCount)
    

    if 条件给了你两件事:

    1. 单数/复数时间分量名称的结果(因此得到的是“1秒”而不是“1秒”),以及

    希望有帮助:)