1

嗨,我的程序员伙伴们,我是新来的,需要一些帮助来使用计时器更新 UIView 背景。是否可以在特定小时范围内设置计时器?我希望能够将它放在背景会根据一天中的什么时间改变颜色的地方。另外,即使用户不使用该应用程序,我也可以将它更新到它会更新的位置吗?我希望我的应用程序能够拥有非常好的用户界面和用户体验,而不必停留在应用程序上。我一直在研究计时器,但是它们使用秒数,这就是为什么我对是否可以使用小时数感到好奇的原因。先感谢您!

4

2 回答 2

0

我认为你有两个不同的任务:

  1. 根据当前时间选择合适的视图样式。(我认为这很简单,只需获取本地时间viewWillAppearwillMoveToWindow使用 NSDate 即可)。
  2. 通过更改时间来更新活动视图。

要解决第二个任务,您可以使用计时器。只需使用 timer 来检查时间,因为您可以将 timer 安排到您应该更改样式的最近时间:

let timer = Timer(fire: Date(timeIntervalSinceNow: 1000.0), interval: 60.0 * 60.0, repeats:true) { (sender) in
            //check current time and update view's background;
            //or send notification about time
        }
RunLoop.current.add(timer, forMode: .common)

为了使您的代码更好,请创建一些类来封装计时器的创建和发布有关时间变化的通知。

UPD
我认为你应该从头开始。首先,阅读UIViewControllerUIViewNotificationCenterTimer。您还应该阅读有关事件驱动架构的信息。之后,您将查看您的应用程序并决定可以在何处添加 colorUpdate 函数。
如果您需要完整的解决方案而不了解您的应用程序,您可以找到可以为您创建它的人(在 Freelance 或 Upwork 或在您可以找到外包商的其他地方)。

PS
将 colorUpdate 函数添加到 NotificationCenter 是一个坏主意,您可以将此方法添加到 Notification 的处理程序中。

于 2018-10-25T04:25:22.313 回答
0

Swift 4 的工作代码。

对于这个简单的事情,不需要使用计时器或任何您可以使用的代码UserDefaults

viewWillAppear在方法中添加这个。

import UIKit

class MainVC: UIViewController {

    override func viewWillAppear(_ animated: Bool) {

        if let Last_Update_Date = kUserDefults_("last_update_date") as? Date{

            print(Date().minutes(from: Last_Update_Date)) // Time Different in minutes

            if Date().minutes(from: Last_Update_Date) > 60{
                // update view's background
                self.view.backgroundColor = UIColor.red
                // update date in UserDefaults
                kUserDefults(Date() as AnyObject, key: "last_update_date")
            }
        }else{

            kUserDefults(Date() as AnyObject, key: "last_update_date")
        }
    }
}

将价值存储在 UserDefaults

func kUserDefults(_ value : AnyObject, key : String ){
    let defults = UserDefaults.standard
    defults.setValue(value, forKey: key)
    defults.synchronize()
}

从中检索值 UserDefaults

func kUserDefults_( _ key : String) -> AnyObject? {
    let defults = UserDefaults.standard
    return defults.value(forKey: key ) as AnyObject?
}

日期 extension

extension Date {
    /// Returns the amount of minutes from another date
    func minutes(from date: Date) -> Int {
        return Calendar.current.dateComponents([.minute], from: date, to: self).minute ?? 0
    }
}
于 2018-10-25T05:50:26.977 回答