关于ios的切图颜色处理
有些朋友应该会经常碰到这样的状况,美工给了你一张切图,但你需要用另一种颜色来标记这张切图的选中状态。那么问题来了,对于忙碌的美工来说你找他要切图,他有可能几天后才给你,大大增加了开发的事件成本。
其实APPLE已经提供了如何处理切图颜色的API,我们直接上代码吧
UIImage *image = [self.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
imageView.image = image;
imageView.tintColor = [UIColor whiteColor];
在iOS7中,我们有了imageWithRenderingMode,这是UIImage的一个方法,参数是有三个选项的枚举值UIImageRenderingMode。
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);
- UIImageRenderingModeAlwaysOriginal 就和字面的意思一样,这个模式告诉系统按照图片文件原来的样子渲染图片。
- UIImageRenderingModeAlwaysTemplate 这是最有意思的模式。首先会扫描你的图片,然后从图片中所有不透明的像素创建一个模板。这同时也会忽略图片的所有颜色信息。你可以使用UIView子类的tintColor属性来给图片填充你选择的颜色。
- UIImageRenderingModeAutomatic 这个模式由系统根据图片的使用环境来决定如何渲染图片。如果你的图片是用在比如UITabBar、UINavigationBar、UIToolbar 和UISegmentedControl这些地方,图片使用AlwaysTemplate渲染模式。图片用在其他的地方则会使用AlwaysOriginal渲染模式。
是不是很神奇?用代码改变图片的颜色,现在变得简单多了。