做聊天功能時,美工給了一張綠色泡泡素材,但有的場景下要求泡泡是白色的,而美工又沒提供白色版本铃诬,這時我們就要會如何自己修改圖片顏色。
方法一:用CoreGraphic繪制
優(yōu)點(diǎn):完全自己控制苍凛,可以繪制包含多種顏色的圖片
缺點(diǎn):形狀大小都需要計(jì)算趣席,代碼較多,尤其在圖片形狀比較復(fù)雜時
方法二:使用遮罩mask
優(yōu)點(diǎn):形狀不需要計(jì)算
缺點(diǎn):大小需要計(jì)算醇蝴;顏色單一宣肚,由被遮罩的圖層顏色決定
UIImage *bubble = self.backImageView.image;
UIImageView *ImageView = [[UIImageView alloc] init];
[ImageView setSize:self.frame.size];
[ImageView setImage:[bubble stretchableImageWithLeftCapWidth:30 topCapHeight:30]];
CALayer *layer = ImageView.layer;
layer.frame = (CGRect){{0,0},ImageView.layer.frame.size};
self.backImageView.image = nil;
self.backImageView.backgroundColor = [UIColor whiteColor];
self.backImageView.layer.mask = layer;
[self.backImageView setNeedsDisplay];
方法三:使用tintColor
優(yōu)點(diǎn):形狀大小都不需要計(jì)算
缺點(diǎn):顏色單一,由UIImageView的tintColor決定
self.backImageView.image = [self.backImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
self.backImageView.tintColor = [UIColor whiteColor];
總結(jié)
很明顯悠栓,使用tintColor來實(shí)現(xiàn)最簡單霉涨。但是tintColor一般配合PNG圖片,并且圖片的渲染模式要設(shè)置為UIImageRenderingModeAlwaysTemplate惭适。效果就是圖片中帶透明度的部分會被完全透明化笙瑟,完全不透明的部分顏色跟隨tintColor。
When you elect to treat an image as a template, the system ignores the image’s color information and creates an image stencil based on the alpha values in the image (parts of the image with an alpha value of less than 1.0 get treated as completely transparent).