ios - 如何在每天早上 8 点 30 分调用函数
问题描述
我正在尝试制作一个测验应用程序,我希望它每天早上 8:30 显示一个新问题,并在下午 6 点消失。我在网上看到主要方法是使用计时器,但我的问题是如果这个人更改时区,计时器不会不同步吗?还是每天都重启?这是我的代码:(请注意我是初学者)
此外,每当我加载我的应用程序时,问题会出现一秒钟然后消失,然后在计时器到时再次出现。
@objc func loadQuestion() {
questionView.alpha = 0
self.view.addSubview(questionView)
questionView.center = self.view.center
questionView.transform = CGAffineTransform.init(scaleX: 1.3, y: 1.3)
UIView.animate(withDuration: 0.4) {
self.visualEffectView.effect = self.effect
self.questionView.alpha = 1
self.questionView.transform = CGAffineTransform.identity
let date = Date().addingTimeInterval(30600)
let timer = Timer(fireAt: date, interval: 0, target: self, selector: #selector(self.loadQuestion), userInfo: nil, repeats: false)
RunLoop.main.add(timer, forMode: .common)
}
}
@objc func loadOutQuestion() {
UIView.animate(withDuration: 0.3, animations: {
self.questionView.transform = CGAffineTransform.init(scaleX: 1.3, y: 1.3)
self.questionView.alpha = 0
self.visualEffectView.effect = nil
let date = Date().addingTimeInterval(64800)
let timer = Timer(fireAt: date, interval: 0, target: self, selector: #selector(self.loadOutQuestion), userInfo: nil, repeats: false)
RunLoop.main.add(timer, forMode: .common)
}) { (succcess:Bool) in
self.questionView.removeFromSuperview()
}
}
解决方案
这就是我到目前为止所拥有的。我不知道我离解决这个问题越来越近还是越来越远
@objc func loadQuestion() {
self.view.addSubview(questionView)
questionView.center = self.view.center
questionView.transform = CGAffineTransform.init(scaleX: 1.3, y: 1.3)
questionView.alpha = 0
var dateComponents = DateComponents()
dateComponents.hour = 08
dateComponents.minute = 30
let currentTime = DateComponents()
let hour = currentTime.hour
let minute = currentTime.minute
var calendar = Calendar.current
calendar.timeZone = NSTimeZone.local
if hour >= dateComponents {
UIView.animate(withDuration: 0.4) {
self.visualEffectView.effect = self.effect
self.questionView.alpha = 1
self.questionView.transform = CGAffineTransform.identity
}
}
}
推荐阅读
- excel - 将 CSV (UTF-8) 导入 Excel 而不进行格式化
- java - 如何将来自多个接口和父类的对象存储在一个数组中
- mysql - 如何将条形码插入 mysql 数据库?
- c# - 使用 WebAPI 作为数据源的脚手架 Razor Pages 服务器端 CRUD 代码
- c# - 如何在 .net 中检测文档和真实硬件打印机?
- azure - 如何从 azure rest API'S 获取资源和资源组成本信息
- java - 谷歌地图不显示在片段中
- kubernetes - 版本“v1”中的部署不能作为部署处理:
- python - 从python中的词袋中搜索文本
- ruby-on-rails - Rails、Puma、Sidekiq 如何计算总数据库连接数?