詳解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屬性改變時,也會調用這個方法。我們可以在這個方法中根據需要去重新整理我們的視圖。
樣本:
下面這個圖片中是我在故事板中拖得幾個控制項,其中有按鈕,label,滑塊,imageView,當然都還沒有設定tintColor的
當我把self.view的tintColor改為red時,如下
如上,大家可以看見可以通過改一個tintColor屬性可以改很多控制項的顏色,當你想要在一款APP中把他所有的控制項顏色都改了的話,就可以在APPDelegate裡改變window的tintColor,我嘗試列印預設的tintColor和tintAdjustmentMode,分別輸出了[UIDeviceRGBColorSpace 0 0.478431 1 1]和1,這是在我們沒有對整個視圖階層設定任何tint color相關的值的情況下的輸出。可以看到,雖然我們沒有設定tintColor,但它仍然返回了系統的預設值;而 tintAdjustmentMode則預設返回Normal的原始值。
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屬性為AlwaysTemplate