添加计时器以更新 UIView 背景颜色
Adding Timers to Update UIView Background Color
各位程序员大家好,我是新来的,在更新 UIView background with timers 方面需要一些帮助。是否可以在特定的时间范围内设置计时器?我希望能够让背景根据一天中的时间改变颜色。另外,即使用户不使用该应用程序,我是否可以将其更新到更新的位置?我希望我的应用程序能够拥有非常好的 UI 和用户体验,而无需停留在应用程序上。我一直在研究计时器,但是他们使用的是秒,这就是为什么我很好奇我是否可以使用小时来代替。提前致谢!
我认为你有两个不同的任务:
- Select 根据当前时间适当的视图样式。 (我认为这很简单,只需使用 NSDate 在
viewWillAppear
或 willMoveToWindow
中获取本地时间即可)。
- 通过更改时间来更新活动视图。
要解决第二个任务,您可以使用计时器。只需使用计时器来检查时间,为此您可以将计时器安排到您应该更改样式的最近时间:
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)
为了使您的代码更好,请创建一些 class 来封装计时器创建和 posting notification 关于时间更改的内容。
UPD
我认为你应该从头开始。首先,了解 UIViewController, UIView, NotificationCenter, Timer. Also you should read about a event-driven architecture。之后您将查看您的应用程序并决定在哪里可以添加 colorUpdate 函数。
如果您需要完整的解决方案而不了解您的应用程序,您可以找到可以为您创建它的人(在 Freelance 或 Upwork 上或在其他可以找到外包商的地方)。
P.S.
将 colorUpdate 函数添加到 NotificationCenter 中不是一个好主意,您可以将此方法添加到通知的处理程序中。
Swift4 的工作代码
对于这个简单的事情不需要使用计时器或任何你可以用 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
}
}
各位程序员大家好,我是新来的,在更新 UIView background with timers 方面需要一些帮助。是否可以在特定的时间范围内设置计时器?我希望能够让背景根据一天中的时间改变颜色。另外,即使用户不使用该应用程序,我是否可以将其更新到更新的位置?我希望我的应用程序能够拥有非常好的 UI 和用户体验,而无需停留在应用程序上。我一直在研究计时器,但是他们使用的是秒,这就是为什么我很好奇我是否可以使用小时来代替。提前致谢!
我认为你有两个不同的任务:
- Select 根据当前时间适当的视图样式。 (我认为这很简单,只需使用 NSDate 在
viewWillAppear
或willMoveToWindow
中获取本地时间即可)。 - 通过更改时间来更新活动视图。
要解决第二个任务,您可以使用计时器。只需使用计时器来检查时间,为此您可以将计时器安排到您应该更改样式的最近时间:
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)
为了使您的代码更好,请创建一些 class 来封装计时器创建和 posting notification 关于时间更改的内容。
UPD
我认为你应该从头开始。首先,了解 UIViewController, UIView, NotificationCenter, Timer. Also you should read about a event-driven architecture。之后您将查看您的应用程序并决定在哪里可以添加 colorUpdate 函数。
如果您需要完整的解决方案而不了解您的应用程序,您可以找到可以为您创建它的人(在 Freelance 或 Upwork 上或在其他可以找到外包商的地方)。
P.S.
将 colorUpdate 函数添加到 NotificationCenter 中不是一个好主意,您可以将此方法添加到通知的处理程序中。
Swift4 的工作代码
对于这个简单的事情不需要使用计时器或任何你可以用 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
}
}