我试图通过允许用户选择小时、分钟和秒,然后使用标签倒计时来模仿 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 * 60。Value in Seconds PickerView
