在iOS 7中 UIImage新增了一個只讀屬性renderingMode,同時增加了一個方法
-(UIImage *)imageWithRenderingMode (UIImageRenderingMode)renderingMode
用于設置image的renderingMode。 使用這個屬性可以設置圖片是否要使用當前視圖的tintColor。
renderingMode有三種,以下是其枚舉值
typedef NS_ENUM(NSInteger, UIImageRenderingMode) {
UIImageRenderingModeAutomatic,
// Use the default rendering mode for the context where the image is used
UIImageRenderingModeAlwaysOriginal,
// Always draw the original image, without treating it as a template
UIImageRenderingModeAlwaysTemplate,
// Always draw the image as a template image, ignoring its color information
} NS_ENUM_AVAILABLE_IOS(7_0)
-
UIImageRenderingModeAutomatic是圖片默認的渲染模式,會根據圖片的上下文自動選擇渲染方式。 -
UIImageRenderingModeAlwaysOriginal設置圖片始終保持原圖色彩,不隨tintColor的改變而改變 -
UIImageRenderingModeAlwaysTemplate是圖片無視自己的色彩信息,使用追隨當前視圖的tintColor。
嘗試一下

使用默認模式的image
這個按鈕設計圖,原圖是白色,使用了默認的
UIImageRenderingModeAutomatic圖片渲染方式,可以看出,此時這張圖片的色彩和button的tintColor保持了一致。

backgroundColor和tintColor一致
在我將button背景顏色和tintColor設為相同顏色時,button中的圖片并沒有如我想象的將圖片恢復本來的顏色。

UIImageRenderingModeAlwaysOriginal模式下的image
在我將圖片的渲染模式設置成
UIImageRenderingModeAlwaysOriginal時,不管button的tintColor如何改變,圖片始終保持其真實色彩。

UIImageRenderingModeAlwaysTemplate下的image
在設置了圖片渲染模式為
UIImageRenderingModeAlwaysTemplate后,button中圖片的顏色始終和其tintColor保持一致。