iOS開發之tintColor屬性詳解

詳解tintColor屬性

 

tintColor屬性是iOS7以後新加的一個屬性,這個屬性定義了一個非默認的着色顏色值,其值的設置會影響到以視圖爲根視圖的整個視圖層次結構。它主要是改變控件的顏色,以獲取一些有意思的視覺效果。

  • tintColor屬性-  默認狀況下,tintColor屬性是默認爲nil的,當咱們設置一個視圖的tintColor屬性時,他會自動傳播到他的子視圖的,所以,要設置一個控件的顏色,即就要設置他的父視圖的tintColor,當你沒有設置tintColor時,系統默認爲藍色。
  • 與tintColor屬性相關的還有個tintAdjustmentMode屬性,它是一個枚舉值,定義了tint color的調整模式。
複製代碼
typedef NS_ENUM(NSInteger, UIViewTintAdjustmentMode) {
        UIViewTintAdjustmentModeAutomatic,//視圖的着色調整模式與父視圖一致
        
        UIViewTintAdjustmentModeNormal, // 視圖的tintColor屬性返回徹底未修改的視圖着色顏色

        UIViewTintAdjustmentModeDimmed,// 視圖的tintColor屬性返回一個去飽和度的、變暗的視圖着色顏色

    } NS_ENUM_AVAILABLE_IOS(7_0);
複製代碼
  • tintColorDidChange方法-  這個方法會在視圖的tintColor或tintAdjustmentMode屬性改變時自動調用。另外,若是當前視圖的父視圖的tintColor或tintAdjustmentMode屬性改變時,也會調用這個方法。咱們能夠在這個方法中根據須要去刷新咱們的視圖。

示例:html

下面這個圖片中是我在故事板中拖得幾個控件,其中有按鈕,label,滑塊,imageView,固然都尚未設置tintColor的post

當我把self.view的tintColor改成red時,效果圖以下字體

 

如上,你們能夠看見能夠經過改一個tintColor屬性能夠改不少控件的顏色,當你想要在一款APP中把他全部的控件顏色都改了的話,就能夠在APPDelegate裏改變window的tintColor,我嘗試打印默認的tintColor和tintAdjustmentMode,分別輸出了[UIDeviceRGBColorSpace 0 0.478431 1 1]和1,這是在咱們沒有對整個視圖層次結構設置任何tint color相關的值的狀況下的輸出。能夠看到,雖然咱們沒有設置tintColor,但它仍然返回了系統的默認值;而 tintAdjustmentMode則默認返回Normal的原始值。url

    NSLog(@"%@",self.view.tintColor);
    
    NSLog(@"%ld",self.view.tintAdjustmentMode);
    
    self.view.tintColor = [UIColor redColor];

 

 

可能有些同窗看到這兒納悶了,不是說tintColor能夠改變子視圖的顏色嗎?怎麼上面的label和imageView的顏色怎麼沒改呢,這個問題呢,其實很簡單,咱們能夠經過重寫tintColorDidChange這個方法來監測tintColor的變化,當self.View的tintColor顏色改變時,能夠設置label字體的顏色。imageView的顏色沒改的緣由是咱們沒有設置圖片的imageWithRenderingMode屬性爲AlwaysTemplatespa

相關文章
相關標籤/搜索