0

我试图通过允许用户选择小时、分钟和秒,然后使用标签倒计时来模仿 Apple 的计时器。

这是我的故事板的样子: 在此处输入图像描述

这是我的代码

//
//  ViewController.swift
//  pickerViewExample
//
//

import UIKit

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

    @IBOutlet weak var countDownLabel: UILabel!
    @IBOutlet weak var hourLabel: UILabel!
    @IBOutlet weak var minuteLabel: UILabel!
    @IBOutlet weak var secondLabel: UILabel!
    
    @IBOutlet weak var hourPicker: UIPickerView!
    @IBOutlet weak var minutePicker: UIPickerView!
    @IBOutlet weak var secondPicker: UIPickerView!
    var hours = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"]
    var minutes = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60"]
    var seconds = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60"]
    
    @IBOutlet weak var pic: UILabel!
    
    var timer = Timer()
    var counter = 15 // this is the problem, I want the 3 PickerView's values
    override func viewDidLoad() {
        super.viewDidLoad()
        self.hourPicker.dataSource = self
        self.hourPicker.delegate = self
        // Do any additional setup after loading the view, typically from a nib.
        self.minutePicker.dataSource = self
        self.minutePicker.delegate = self
        
        self.secondPicker.dataSource = self
        self.secondPicker.delegate = self
    

        
    }
    
    @IBAction func fireTimer(_ sender: Any) {
        let _ = Timer.scheduledTimer(timeInterval: 0.4, target: self, selector: #selector(self.timerAction), userInfo: nil, repeats: true)
    }
    @objc func timerAction() {
        if (counter > 0) {
            counter -= 1
            countDownLabel.text = "\(counter)"
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    // data source method
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    // data source method
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if (pickerView == hourPicker) {
            return hours.count
        }
        if (pickerView == minutePicker) {
            return minutes.count
        }
        if (pickerView == secondPicker) {
            return seconds.count
        }
        return 20;
    }
  
    // delegate method
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if (pickerView == hourPicker) {
            return hours[row]
        }
        if (pickerView == minutePicker) {
            return minutes[row]
        }
        if (pickerView == secondPicker) {
            return seconds[row]
        }
        return "NIL";
    }
    
    // delegate method
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

        if (pickerView == hourPicker) {
            print(hourPicker.selectedRow(inComponent: 0).description)
            hourLabel.text = hours[row]
        }
        if (pickerView == minutePicker) {
            print(minutePicker.selectedRow(inComponent: 0).description)
            minuteLabel.text = minutes[row]
        }
        if (pickerView == secondPicker) {
            print(secondPicker.selectedRow(inComponent: 0).description)
            secondLabel.text = seconds[row]
        }
        
    }

}

我能够从每个 PickerViews 中获取数据,选择小时、分钟和秒。3 个标签从每个各自的 PickerView 值中获取该值。

我怎样才能使用这些值,以便Timer()可以从它倒计时?我不能将 声明count为全局变量并让它接受每个 PickerViews 的值。

我想要的是counter等于value in the Hours PickerView * 60 * 60++并让 Timer 从那里倒计时value in Minutes PickerView * 60Value in Seconds PickerView

4

0 回答 0