ios給按鈕圖片根據不同的主題更改顏色
阿新 • • 發佈:2019-01-05
有時候在設計程式的時候,會涉及到主題模式的設計,根據不同的主體顏色,所對應的各個介面不同的按鈕(導航欄、狀態列等),都需要對應的去改變顏色。
首先:用ps將按鈕上圖片的背景顏色改成白色的,如果圖片本身有顏色,將無法通過程式碼的方式對其著色(很重要)。
核心程式碼:
+(UIImage *)colorizeImage:(UIImage *)baseImage withColor:(UIColor *)theColor {
UIGraphicsBeginImageContext(baseImage.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGRect area = CGRectMake(0, 0, baseImage.size.width, baseImage.size.height);
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -area.size.height);
CGContextSaveGState(ctx);
CGContextClipToMask(ctx, area, baseImage.CGImage);
[theColor set];
CGContextFillRect(ctx, area);
CGContextRestoreGState(ctx);
CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
CGContextDrawImage(ctx, area, baseImage.CGImage);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
只需要把對應的圖片和所需要的顏色傳進來,就可以得到想要顏色的圖片了,但這裡還有一個問題,你可能為按鈕圖片準備好了@3x的圖片,但是還過於模糊,這時,需要修改一些這個方法:
UIGraphicsBeginImageContext(CGSizeMake(baseImage.size.width * baseImage.scale, baseImage.size.height * baseImage.scale));
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGRect area = CGRectMake(0, 0, baseImage.size.width* baseImage.scale, baseImage.size.height* baseImage.scale);
在相同的地方進行替換,對圖片的大小乘以baseImage.scale,就可以自動識別你傳入圖片是@2x還是@3x了,這樣得到的圖片就是清楚的圖片了