如何以编程方式为状态栏计算正确的文本颜色?

时间:2014-11-21 15:48:21

标签: ios cocoa-touch statusbar

我正在开发一个iOS应用程序,其中应用程序的主要颜色(以及状态栏颜色)也可以由用户选择。是否有任何函数可以计算状态栏上的白色或黑色文本颜色是否从RGB或HEX颜色开始编程?

2 个答案:

答案 0 :(得分:3)

这就是我的所作所为。总之 - 获取颜色的RGB值。然后根据RGB值计算灰度值。然后根据灰度选择状态栏样式。

第1步 - 从UIColor

获取RGB值
UIColor *color =  // your color
CGFloat red, green, blue, alpha;

if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {

    CGFloat white;
    if ([color getWhite:&white alpha:&alpha]) {
        red = green = blue = white;
    } else {
        NSLog(@"Uh oh, not RGB or grayscale");
    }
}

步骤2 - 根据RGB值计算灰度值:

CGFloat gray = 0.299 * red + 0.587 * green + 0.114 * blue;

第3步 - 选择状态栏样式:

UIStatusBarStyle style = gray > 0.6 ? UIStatusBarStyleDefault : UIStatusBarStyleLightContent;

0.6的使用通常有效。您可能需要根据自己的喜好进行调整。

答案 1 :(得分:0)

查看此链接 Check if UIColor is dark or bright?

你可以用类似的东西找出你的RGB值。

const CGFloat *colors = CGColorGetComponents(self.view.backgroundColor.CGColor );

NSLog(@"R:%f G:%f B:%f",colors[0],colors[1],colors[2]);

然后根据这些颜色计算所需的文字颜色。