【问题标题】:How to calculate the correct Text Color for status bar programmatically?如何以编程方式计算状态栏的正确文本颜色?
【发布时间】:2014-11-21 15:48:21
【问题描述】:

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

【问题讨论】:

  • 那么,您本质上是希望我们为您编写应用程序的主要功能?提出这样的问题并没有错,但请提供代码 sn-ps 向我们展示您下次的尝试。
  • 我不是在问它。 @rmaddy 完美地提出了我的问题。
  • 我很抱歉 - 您问题的措辞可能让我感到困惑。很高兴你得到你的答案!祝你好运!

标签: ios cocoa-touch statusbar


【解决方案1】:

这就是我所做的。总之 - 获取颜色的 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 的使用通常有效。您可能需要调整它以适合您的口味。

【讨论】:

  • 哇,谢谢!我能问一下为什么 0.299、0.587 和 0.114 是 moltiplicator 吗?
  • 这是将 RGB 值转换为灰度的标准公式。不是我编的。
【解决方案2】:

查看此链接 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]);

然后根据这些计算出你想要的文字颜色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2014-12-15
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    相关资源
    最近更新 更多