首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计时器倒计时6小时,到达计时时停止,按下按钮后再启动6小时。

计时器倒计时6小时,到达计时时停止,按下按钮后再启动6小时。
EN

Stack Overflow用户
提问于 2020-10-08 05:52:05
回答 2查看 285关注 0票数 0

我需要一个计时器来倒数6个小时。

到达时间时,.It必须重置

当按下按钮时,必须激活.It。

.It必须在应用程序打开或关闭时继续运行。

我有一个倒计时计时器到一个日期和另一个倒计时计时器,只有在应用程序是活跃的工作。

我如何做一个计时器,计数6个小时?

计时器倒计时到日期⬇︎

代码语言:javascript
运行
复制
var timeCount: NSDate?
var timer = Timer()

timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countdown), userInfo: nil, repeats: true)

@objc func countdown()
{
let endTime = "08-10-2020 18:00:00"
let formatter = DateFormatter()
formatter.dateFormat = "dd-MM-yyyy HH:mm:ss"
timeCount = (formatter.date(from: endTime))! as NSDate

let currentDate = Date()
let calendar = Calendar.current

let diffDateComponents = calendar.dateComponents([.hour, .minute, .second], from: currentDate, to: timeCount! as Date)

let countdown = "\(diffDateComponents.hour ?? 0):\(diffDateComponents.minute ?? 0):\(diffDateComponents.second ?? 0)"

let hourS = diffDateComponents.hour!
let minuteS = diffDateComponents.minute!
let secondS = diffDateComponents.second!

print(countdown)

if countdown == "0:0:0"
{
   button.setTitle("PRESS", for: .normal)
   button.backgroundColor = .green
   timer.invalidate()
}
else
{
   button.setTitle("PRESS WHEN TIME RUNS OUT" + "\n\(String(format: "%02d:%02d:%02d", hourS, minuteS, secondS))", for: .normal)
   button.backgroundColor = .red
}
}

只在应用程序是活动的⬇︎时计时器倒计时

代码语言:javascript
运行
复制
var timer = Timer()
var hours = 06
var minutes = 00
var secs = 00


timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countdown), userInfo: nil, repeats: true)

@objc func countdown()
{
    secs = secs-1
    if (secs<0)
    {
        secs = 59
        minutes=minutes-1
        if (minutes<0)
        {
            minutes = 59
            hours = hours-1
            if (hours<0)
            {
                hours = 0
                minutes = 0
                secs = 0
                
                timer.invalidate()
            }
        }
    }

var hourp: String
var minutesp: String
var secp: String
    
if(hours<10)
{
hourp = "0" + String(describing: hours)
}
else
{
hourp = String(describing: hours)
}
if(minutes<10)
{
minutesp = "0" + String(describing: minutes)
}
else
{
minutesp = String(describing: minutes)
}
if(secs<10)
{
secp = "0" + String(describing: secs)
}
else
{
secp = String(describing: secs)
}
let timing = hourp + ":" + minutesp + ":" + secp
    
print(timing)

if hours == 0 && minutes == 0 && secs == 0
{
button.setTitle("PRESS", for: .normal)
button.backgroundColor = .green
else
{
button.setTitle("PRESS WHEN TIME RUNS OUT" + "\n\(timing)" , for: .normal)
button.backgroundColor = .red
}

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-12 03:18:27

这就是我最终不得不做的事情,这样我才能如愿以偿。

多亏了@Burak K se的回答,他把我引导到了正确的方向。

代码语言:javascript
运行
复制
import UIKit
import Foundation

var timer = Timer()
var currentTime = Date()
var compareTime = Date().addingTimeInterval(-21600)


func setupButtonTitle()
{
 if UserDefaults.standard.object(forKey: "count6") == nil
    {
        button.setTitle("PRESS", for: .normal)
        button.backgroundColor = .green
    }
    else
    {
        button.setTitle("PRESS" + "\nIN " + "\(startTimer()))" , for: .normal)
    }
  button.addTarget(self, action: #selector(buttonTap), for: .touchUpInside)
}


func startTimer()
{
  timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(sixHourCountdown), userInfo: nil, repeats: true)
}

@objc func sixHourCountdown()
{
    let timeStarted = UserDefaults.standard.object(forKey: "count6")
    
    let timeStart = timeStarted as! Date
    let diffComponents = Calendar.current.dateComponents([.hour, .minute, .second], from: compareTime, to: timeStart)
    let hour = diffComponents.hour!
    let minute = diffComponents.minute!
    let second = diffComponents.second!
    let timeRemaining = String(format: "%02d:%02d:%02d", hour, minute, second)

    compareTime += 1
    
    if hour == 0 && minute == 0 && second == 0 || timeStart < compareTime
    {
        button.setTitle("PRESS", for: .normal)
        button.backgroundColor = .green
        timer.invalidate()
    }
    else
    {
        button.setTitle("PRESS IN" + "\n\(timeRemaining)", for: .normal)
    }
}


@objc func buttonTap()
{
    if button.currentTitle != "PRESS"
    {
        button.backgroundColor = .red
        DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(2), execute:
        {
         button.backgroundColor = .yellow
        })
    }
    if button.currentTitle == "PRESS" && button.backgroundColor == .green
    {
        UserDefaults.standard.set(currentTime, forKey: "count6")

        let otherVC = OTHERVC()
        self.navigationController?.pushViewController(otherVC, animated: true)
    }
}


override func viewDidLoad() {
    super.viewDidLoad()


setupButtonTitle()
票数 0
EN

Stack Overflow用户

发布于 2020-10-08 09:40:25

您可以获得时间并在按下按钮时保存它,然后您可以在viewdiload中占用时间并将它们进行比较。

就像这样

首先创建两个变量,一个用于当前时间,另一个用于比较

代码语言:javascript
运行
复制
var currentTime = Date()
var compareTime = Date().addingTimeInterval(21600) //6 hours is 21600 second

现在我们需要节省点击按钮的时间;

代码语言:javascript
运行
复制
UserDefaults.standard.set(currentTime, forKey: "time")

现在我们需要比较这些时代;

代码语言:javascript
运行
复制
override func viewDidLoad() {
    super.viewDidLoad()
    var time = UserDefaults.standard.object(forKey: "time")
        if let newTime = time as? Date {
        if let difference = Calendar.current.dateComponents([.hour], from: newTime, to: compareTime).hour {
            if difference > 6 {
              //make whatever you want if 6 hours is finish
            }
               }
            }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64256536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档