在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保持一致。
网友评论