2016-12-25 50 views
3

很簡單,我只是想改變我的backgroundView的顏色取決於一天中的時間,但由於某種原因,它不起作用。任何幫助都會很棒。想要改變UIView背景顏色與時間

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

您是否已將backgroundView鏈接到故事板? –

+0

是的,我只是雙重檢查,它是 – Otheprogrammer

回答

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

謝謝,這個答案完美的作品!另一個感謝你將我從未來的麻煩中解救出來,找出爲什麼在「6,18,24」上沒有發生變化 – Otheprogrammer

+0

@歡迎程序員;節日快樂。聖誕節快樂 :-) – Unheilig

1

在運行你的應用程序,你可能已經在Xcode中得到了一個類似於以下內容的控制檯日誌消息:

[圖形]用遠遠超出 預期範圍的元件值創建的UIColor。在 UIColorBreakForOutOfRangeColorComponents上設置斷點以進行調試。此消息將 只能被記錄一次。

UIColorinit(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交換機邏輯的好點。但是,如果此故意,那麼您的默認情況下將捕獲小時0,6,1824,並且您的背景顏色將爲greyColor