Pretty simple, I just want to change my backgroundView's color depending on the time of day, but for some reason it doesn't work. Any help would be great.
@IBOutlet weak var backgroundView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let darkColor=UIColor(red: 51, green: 52, blue: 50, alpha: 1.0)
let greyColor=UIColor(red: 238, green: 240, blue: 239, alpha: 1.0)
let hour = NSCalendar.current.component(.hour, from: NSDate() as Date)
switch hour {
case 1..<6: self.backgroundView.backgroundColor = darkColor
break
case 7..<18: self.backgroundView.backgroundColor = greyColor
break
case 19..<24: self.backgroundView.backgroundColor = darkColor
break
default:self.backgroundView.backgroundColor = greyColor
}
}
The problem is that the following lines are ignoring 6, 18, 24, respectively:
1..<6 //1 - 5
7..<18 //7 - 17
19..<24 //19 - 23
Depending on the time you had, when you checked it; if it happened to fall on either 6, 18, 24, then it could be the reason why you thought it is not working.
Using your code, I confirmed that the backgroundColor of the view does change.
Try changing the code to the following:
switch hour
{
// hours 1 to 6
case 1...6: self.backgroundView.backgroundColor = darkColor
break
// hours 7 to 18
case 7...18: self.backgroundView.backgroundColor = greyColor
break
//hours 19 to 23 and 0
case 19...23, 0: self.backgroundView.backgroundColor = darkColor
break
default:self.backgroundView.backgroundColor = greyColor
}
Another problem is the following:
let darkColor=UIColor(red: 51, green: 52, blue: 50, alpha: 1.0)
let greyColor=UIColor(red: 238, green: 240, blue: 239, alpha: 1.0)
as they should be:
let darkColor = UIColor(red: 51/255, green: 52/255, blue: 50/255, alpha: 1.0)
let greyColor = UIColor(red: 238/255, green: 240/255, blue: 239/255, alpha: 1.0)
While running your app, you may have gotten a console log message in Xcode that says something like:
[Graphics] UIColor created with component values far outside the expected range. Set a breakpoint on UIColorBreakForOutOfRangeColorComponents to debug. This message will only be logged once.
The UIColor init(red:green:blue:alpha:) initializer expects a value between 0.0 and 1.0. In order to translate a RGB value that is within 0-255 to a value between 0.0 to 1.0, you need to divide your desired color intensity by 255.
Try changing your color declarations from:
let darkColor = UIColor(red: 51, green: 52, blue: 50, alpha: 1.0)
let greyColor = UIColor(red: 238, green: 240, blue: 239, alpha: 1.0)
to
let darkColor = UIColor(red: 51/255.0, green: 52/255.0, blue: 50/255.0, alpha: 1.0)
let greyColor = UIColor(red: 238/255.0, green: 240/255.0, blue: 239/255.0, alpha: 1.0)
EDIT:
@Unheilig answer makes a good point about your switch logic for the hour. However if this is intentional, then your default case would catch hours 0, 6, 18 and 24 and your background color would be greyColor.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With