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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章