Timer wDidLoad(){ super.viewDidLoad() } 重写函数didReceiveMemoryWarning(){ 超级。我收到了记忆警告() //处置所有可以重新创建的资源。 } } 这不是一个正确的答案,但我开发了一种解决方法,在按下re

Timer wDidLoad(){ super.viewDidLoad() } 重写函数didReceiveMemoryWarning(){ 超级。我收到了记忆警告() //处置所有可以重新创建的资源。 } } 这不是一个正确的答案,但我开发了一种解决方法,在按下re,timer,countdown,Timer,Countdown,wDidLoad(){ super.viewDidLoad() } 重写函数didReceiveMemoryWarning(){ 超级。我收到了记忆警告() //处置所有可以重新创建的资源。 } } 这不是一个正确的答案,但我开发了一种解决方法,在按下resetBtnPressed时隐藏天、小时、分钟、秒标签。在按下STARTBTN时,标签中添加了.isHidden=false。隐藏并显示我想要的方式,即使计时器没有失效。这不是一个正确的答案,但我开发了一个解决方法,在重置按下时隐藏天、小时、分

wDidLoad(){ super.viewDidLoad() } 重写函数didReceiveMemoryWarning(){ 超级。我收到了记忆警告() //处置所有可以重新创建的资源。 } }
这不是一个正确的答案,但我开发了一种解决方法,在按下resetBtnPressed时隐藏天、小时、分钟、秒标签。在按下STARTBTN时,标签中添加了.isHidden=false。隐藏并显示我想要的方式,即使计时器没有失效。这不是一个正确的答案,但我开发了一个解决方法,在重置按下时隐藏天、小时、分钟、秒标签。在按下STARTBTN时,标签中添加了.isHidden=false。隐藏并显示我想要的方式,即使计时器没有失效。
    import UIKit

    class ViewController: UIViewController {

    var resetBtnStatus: Bool = false

    var timer = Timer()

    let userCalendar = Calendar.current
    let requestedComponent: Set<Calendar.Component> = [.day,.hour,.minute,.second]
    var departureDateTime: Date?

    @IBOutlet weak var departureDateTimePicker: UIDatePicker!


    @IBAction func departureDateTimePicker(_ sender: Any) {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "MM/dd/yy H:mm:ss"
        departureDateTimePicker.addTarget(self, action: #selector(handler), for: UIControlEvents.valueChanged)
    }


    @IBOutlet weak var daysLabel: UILabel!
    @IBOutlet weak var hoursLabel: UILabel!
    @IBOutlet weak var minutesLabel: UILabel!
    @IBOutlet weak var secondsLabel: UILabel!

    func handler(sender: UIDatePicker) {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "MM/dd/yy H:mm:ss"
        let departureDateTimeString = dateFormatter.string(from: departureDateTimePicker.date)
        departureDateTime = dateFormatter.date(from: departureDateTimeString)
    }


    @IBAction func resetBtnPressed(_ sender: Any) {
        if resetBtn.isSelected == true {
                resetBtnStatus = true
            }
            departureDateTimePicker.isHidden = false
            startBtn.isHidden = false
            //        let dateFormatter = DateFormatter()
            //        dateFormatter.dateFormat = "MM/dd/yy H:mm:ss"
            //        let startTime = Date()
            //        let endTime = startTime
            //        let timeDifference =  userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime)
            //        daysLabel.text = "\(timeDifference.day!) Days"
            //        hoursLabel.text = "\(timeDifference.hour!) Hours"
            //        minutesLabel.text = "\(timeDifference.minute!) Minutes"
            //        secondsLabel.text = "\(timeDifference.second!) Seconds"

        }

//    @IBAction func resetBtnPressed(_ sender: Any) {
//        if resetBtn.isSelected == true {
//            resetBtnStatus = true
//        }
//        departureDateTimePicker.isHidden = false
//        startBtn.isHidden = false
//        //        let dateFormatter = DateFormatter()
//        //        dateFormatter.dateFormat = "MM/dd/yy H:mm:ss"
//        //        let startTime = Date()
//        //        let endTime = startTime
//        //        let timeDifference = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime)
//        //        daysLabel.text = "\(timeDifference.day!) Days"
//        //        hoursLabel.text = "\(timeDifference.hour!) Hours"
//        //        minutesLabel.text = "\(timeDifference.minute!) Minutes"
//        //        secondsLabel.text = "\(timeDifference.second!) Seconds"
//    }


    func printTime() {
        if resetBtnStatus == false {
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "MM/dd/yy H:mm:ss"
            let startTime = Date()
            let endTime = departureDateTime
            let timeDifference = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime!)
            let startTimeDouble: Double = startTime.timeIntervalSinceReferenceDate
            var endTimeDouble: Double?
            endTimeDouble = (endTime?.timeIntervalSinceReferenceDate)


            daysLabel.text = "\(timeDifference.day!) Days"
            hoursLabel.text = "\(timeDifference.hour!) Hours"
            minutesLabel.text = "\(timeDifference.minute!) Minutes"
            secondsLabel.text = "\(timeDifference.second!) Seconds"

            if endTimeDouble! > startTimeDouble {
                daysLabel.text = "\(timeDifference.day!) Days"
                hoursLabel.text = "\(timeDifference.hour!) Hours"
                minutesLabel.text = "\(timeDifference.minute!) Minutes"
                secondsLabel.text = "\(timeDifference.second!) Seconds"
            }
            else {
                timer.invalidate()
                daysLabel.text = ""
                hoursLabel.text = ""
                minutesLabel.text = ""
                secondsLabel.text = ""
            }
        } else {
            timer.invalidate()
            daysLabel.text = ""
            hoursLabel.text = ""
            minutesLabel.text = ""
            secondsLabel.text = ""
        }

    }

    func runTimer() {
        if resetBtnStatus == false {
        let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self,    selector: #selector(printTime), userInfo: nil, repeats: true)
        timer.fire()
        }

        if resetBtnStatus == true {
            timer.invalidate()
        }
    }



    @IBOutlet weak var startBtn: UIButton!

    @IBAction func startBtnPressed(_ sender: Any) {
        handler(sender: departureDateTimePicker)
        printTime()
        runTimer()
        departureDateTimePicker.isHidden = true
        startBtn.isHidden = true
    }

    @IBOutlet weak var resetBtn: UIButton!



    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    }