首页 > 解决方案 > 如何在每天早上 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()
    }
}

标签: iosswift

解决方案


这就是我到目前为止所拥有的。我不知道我离解决这个问题越来越近还是越来越远

@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
        }
    }
}

推荐阅读