想要随着时间改变UIView背景颜色

时间:2016-12-25 20:49:57

标签: ios swift uiview

非常简单,我只想根据一天中的时间更改backgroundView的颜色,但由于某种原因它不起作用。任何帮助都会很棒。

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

2 个答案:

答案 0 :(得分:6)

问题是以下几行分别忽略了6,18,24:

1..<6 //1 - 5

7..<18 //7 - 17

19..<24 //19 - 23

取决于你的时间,检查时间;如果它恰好落在6号,18号,24号,那么它可能就是你认为它不起作用的原因。

使用您的代码,我确认视图的backgroundColor确实发生了变化。

尝试将代码更改为以下内容:

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
}

另一个问题如下:

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 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)

答案 1 :(得分:1)

在运行您的应用程序时,您可能在Xcode中收到了一条控制台日志消息,其中包含:

  

[Graphics]使用远远超出的组件值创建的UIColor   预期范围。设置断点   要调试的UIColorBreakForOutOfRangeColorComponents。这条消息会   只记录一次。

UIColor init(red:green:blue:alpha:)初始值设定项需要0.01.0之间的值。要将0-255内的RGB值转换为0.01.0之间的值,您需要将所需的颜色强度除以255

尝试更改颜色声明:

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 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)

修改

@Unheilig回答对hour的切换逻辑提出了一个很好的观点。但是,如果此 是故意的,则您的默认情况会占用小时061824,您的背景颜色将为{ {1}}。