筆記:iOS的tintColor的使用

tintColor是iOS7在UIView中新加屬性尉尾,翻譯為中文是“著色”缘薛。如果未設(shè)置tintColor的顏色值泛粹,則會返回系統(tǒng)默認(rèn)設(shè)置了的藍色顏色值胰柑,這個值會影響以當(dāng)前視圖為根視圖的整個視圖層次結(jié)構(gòu)截亦。例如爬泥,在頁面中創(chuàng)建一個Button按鈕,我們發(fā)現(xiàn)按鈕的標(biāo)題顏色默認(rèn)為藍色崩瓤,默認(rèn)情況下一個視圖的tintColor是nil袍啡,這個視圖會使用父視圖的tintColor值。當(dāng)我們設(shè)置指定視圖的tintColor的屬性值后谷遂,這個著色值將會傳遞到在這個視圖的視圖層級的所有子視圖葬馋,如果子視圖沒有設(shè)置tintColor,則默認(rèn)使用父視圖的顏色值肾扰。

1畴嘶、測試代碼

//父視圖
UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, 120)];
[backView setBackgroundColor:[UIColor whiteColor]];
[self.view addSubview:backView];
[backView setTintColor:[UIColor redColor]];

//在父視圖backView中添加第一個一個button1
UIButton *button1 = [UIButton buttonWithType:UIButtonTypeSystem];
[button1.titleLabel setFont:[UIFont boldSystemFontOfSize:15.0f]];    [button1 setBackgroundColor:[UIColor yellowColor]];
[button1 setTitle:@"TestA" forState:UIControlStateNormal];
[backView addSubview:button1];

//在父視圖backView中添加第二個button2
UIButton *button2 = [UIButton buttonWithType:UIButtonTypeSystem];
[button2.titleLabel setFont:[UIFont boldSystemFontOfSize:15.0f]];
[button2 setBackgroundColor:[UIColor yellowColor]];
[button2 setTitle:@"TestB" forState:UIControlStateNormal];
[backView addSubview:button2];
button2.tintColor = [UIColor greenColor];

//添加與backView同級的button到self.view上
UIButton *button3 = [UIButton buttonWithType:UIButtonTypeSystem];
[button3.titleLabel setFont:[UIFont boldSystemFontOfSize:15.0f]];
[button3 setBackgroundColor:[UIColor yellowColor]];
[button3 setTitle:@"TestB" forState:UIControlStateNormal];
[self.view addSubview:button3];
照片
  • self.view的tintColor未設(shè)置顏色,則使用系統(tǒng)藍色默認(rèn)值集晚,button3為self.view的子視圖窗悯,由于未設(shè)置自身的著色值,根據(jù)tintColor傳遞使用原則button3的tintColor也是系統(tǒng)默認(rèn)值偷拔,標(biāo)題顯示藍色蒋院;
  • backView是self.view的子視圖,button1和button2是backView的子視圖莲绰,此時backView的tintColor設(shè)置為紅色欺旧,button1的tintColor未設(shè)置,button2設(shè)置為綠色蛤签,顯示結(jié)果為button1使用backView傳遞過來的著色值紅色辞友,button2顯示自身設(shè)置的著色值綠色

4震肮、tintAdjustmentMode屬性

這個屬性是一個枚舉屬性称龙,它定義了tintColor的調(diào)整模式;

typedef NS_ENUM(NSInteger, UIViewTintAdjustmentMode) {
    UIViewTintAdjustmentModeAutomatic,// 視圖的著色調(diào)整模式與父視圖一致
    UIViewTintAdjustmentModeNormal,// 視圖的tintColor屬性返回完全未修改的視圖著色顏色
    UIViewTintAdjustmentModeDimmed,//視圖的tintColor屬性返回一個去飽和度的、變暗的視圖著色顏色
}

下面是設(shè)置為Dimmed的效果


image

3戳晌、tintColorDidChange

這個方法會在視圖的tintColor或tintAdjustmentMode屬性改變時自動調(diào)用鲫尊。另外,如果當(dāng)前視圖的父視圖的tintColor或tintAdjustmentMode屬性改變時沦偎,也會調(diào)用這個方法疫向。我們可以在這個方法中根據(jù)需要去刷新我們的視圖。

4豪嚎、UIImageView使用tintColor

UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), 120)];
UIImage *image = [[UIImage imageNamed:@"tabbar_Image"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];    imageView.contentMode = UIViewContentModeCenter;
imageView.tintColor = [UIColor redColor];
[imageView setImage:image];
[self.view addSubview:imageView];

左側(cè)為原圖搔驼,右側(cè)為設(shè)置tintColor為紅色的結(jié)果


image

在對圖片處理時,如果圖片的一個像素的alpha是1,則將它的顏色渲染為tintColor的值疙渣。如果alpha小于1的時候匙奴,則設(shè)置為透明,不會被渲染妄荔。這個處理比較暴力,若果圖片的顏色多樣的話并且alpha=1就會渲染為一種顏色泼菌。

  • 介紹imageWithRenderingMode:
    使用renderingMode設(shè)置UIImage的渲染模式谍肤,可以設(shè)定UIImage是否使用當(dāng)前視圖的tintColor渲染。
typedef NS_ENUM(NSInteger, UIImageRenderingMode) {
    UIImageRenderingModeAutomatic,          // 根據(jù)圖片的使用環(huán)境和所處的繪圖上下文自動調(diào)整渲染模式哗伯。
    UIImageRenderingModeAlwaysOriginal,     // 按照原圖進行渲染荒揣,始終繪制圖片原始狀態(tài),不使用Tint Color
    UIImageRenderingModeAlwaysTemplate,     // 始終根據(jù)TintColor繪制圖片焊刹,忽略圖片的顏色信息
}

5系任、APP設(shè)置全局TintColor

[[UIApplication sharedApplication] keyWindow].tintColor = [UIColor redColor];
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市虐块,隨后出現(xiàn)的幾起案子俩滥,更是在濱河造成了極大的恐慌,老刑警劉巖贺奠,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霜旧,死亡現(xiàn)場離奇詭異,居然都是意外死亡儡率,警方通過查閱死者的電腦和手機挂据,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來儿普,“玉大人崎逃,你說我怎么就攤上這事∶己ⅲ” “怎么了个绍?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長勺像。 經(jīng)常有香客問我障贸,道長错森,這世上最難降的妖魔是什么吟宦? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮涩维,結(jié)果婚禮上殃姓,老公的妹妹穿的比我還像新娘。我一直安慰自己瓦阐,他們只是感情好蜗侈,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著睡蟋,像睡著了一般踏幻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上戳杀,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天该面,我揣著相機與錄音夭苗,去河邊找鬼。 笑死隔缀,一個胖子當(dāng)著我的面吹牛题造,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播猾瘸,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼界赔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了牵触?” 一聲冷哼從身側(cè)響起淮悼,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎揽思,沒想到半個月后敛惊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡绰更,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年瞧挤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片儡湾。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡特恬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出徐钠,到底是詐尸還是另有隱情癌刽,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布尝丐,位于F島的核電站显拜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏爹袁。R本人自食惡果不足惜远荠,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望失息。 院中可真熱鬧譬淳,春花似錦、人聲如沸盹兢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绎秒。三九已至浦妄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剂娄。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工窘问, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宜咒。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓惠赫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親故黑。 傳聞我的和親對象是個殘疾皇子儿咱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容