顏色疊加算法,UIButton的高亮色設(shè)置

理論:https://www.zhihu.com/question/21609387

最近在做一個(gè)類似微信公眾號(hào)下部導(dǎo)航的需求,產(chǎn)品要求導(dǎo)航按鈕背景色可以配置,設(shè)計(jì)師要求點(diǎn)擊時(shí)背景色要疊加一個(gè)透明度為5%的#000000純黑色。因而有了本文。
如上述理論,顏色疊加在前在后,得到的結(jié)果是不一樣的。使用的時(shí)候請(qǐng)注意區(qū)分。
代碼:

// forwordColor 是上層顏色,backwordColor是下層顏色
-(UIColor *)colorWithForwordColor:(UIColor *)forwordColor backwordColor:(UIColor *)backwordColor{
    const CGFloat *components = CGColorGetComponents(forwordColor.CGColor);
    const CGFloat *components2 = CGColorGetComponents(backwordColor.CGColor);
    
    CGFloat red1 = components[0];
    CGFloat green1 = components[1];
    CGFloat blue1 = components[2];
    CGFloat alpha1 = components[3];
    
    CGFloat red2 = components2[0];
    CGFloat green2 = components2[1];
    CGFloat blue2 = components2[2];
    CGFloat alpha2 = components2[3];
    
    CGFloat alpha = 1-(1-alpha1)*(1-alpha2);
    CGFloat red = (alpha1*red1+(1-alpha1)*red2*alpha2)/alpha;
    CGFloat green = (alpha1*green1+(1-alpha1)*green2*alpha2)/alpha;
    CGFloat blue = (alpha1*blue1+(1-alpha1)*blue2*alpha2)/alpha;
    
    UIColor *rColor = [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
    return rColor;
}

注意一點(diǎn):這里傳入的UIColor必須是UIDeviceRGBColor(UIExtendedSRGBColorSpace),類似[UIColor BlackColor];這種是灰度顏色(不知是不是準(zhǔn)確,應(yīng)該是GrayColorSpace),是無(wú)法取到RGBA分量的。

得到顏色之后就可以使用如下耳熟能詳?shù)拇a從顏色生成一個(gè)UIImage對(duì)象

- (UIImage*) createImageWithColor: (UIColor*) color
{
    CGRect rect=CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);
    UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return theImage;
}

之后用UIButtonsetBackgroundImage:forState即可實(shí)現(xiàn)點(diǎn)擊高亮態(tài)的顏色變化。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • *7月8日上午 N:Block :跟一個(gè)函數(shù)塊差不多,會(huì)對(duì)里面所有的內(nèi)容的引用計(jì)數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,728評(píng)論 1 14
  • 打印View所有子視圖 layoutSubviews調(diào)用的調(diào)用時(shí)機(jī) 當(dāng)視圖第一次顯示的時(shí)候會(huì)被調(diào)用當(dāng)這個(gè)視圖顯示到...
    hyeeyh閱讀 585評(píng)論 0 3
  • 1. 打印View所有子視圖 po [[self view]recursiveDescription] 2. la...
    Hurricane_4283閱讀 1,069評(píng)論 0 2
  • 心情明信片 感恩:在tx的第二年,由于部門(mén)架構(gòu)的調(diào)整,我換了一個(gè)新領(lǐng)導(dǎo),那時(shí)正趕上年底。新領(lǐng)導(dǎo)按常例找每個(gè)人年底談...
    MeierLiang閱讀 263評(píng)論 0 0
  • 題目:世界上的第二個(gè)我 朋友啊 你從哪里來(lái)往 可曾見(jiàn)過(guò)第二個(gè)我的模樣 她不似我這般溫暖、陽(yáng)光 也不似我這般徘徊、迷...
    雪馨的小天地閱讀 284評(píng)論 0 2

友情鏈接更多精彩內(nèi)容