1. 程式人生 > >ios給按鈕圖片根據不同的主題更改顏色

ios給按鈕圖片根據不同的主題更改顏色

有時候在設計程式的時候,會涉及到主題模式的設計,根據不同的主體顏色,所對應的各個介面不同的按鈕(導航欄、狀態列等),都需要對應的去改變顏色。

首先:用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了,這樣得到的圖片就是清楚的圖片了