【问题标题】:Random color in iOSiOS中的随机颜色
【发布时间】:2014-11-17 21:47:33
【问题描述】:

我想让我的导航栏在每次加载时都变成不同的颜色。我在 viewDidApear 中放置了以下代码:

CGFloat hue = ( arc4random() % 256 / 256.0 );  //  0.0 to 1.0
CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from white
CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from black
UIColor *color = [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];

self.navigationBar.barTintColor = color;

问题是颜色范围太宽了。

我希望它只选择您在这张照片中看到的颜色:

是否可以使用此代码? + 如果不是,我将如何创建一个类似的颜色,从我定义的几种颜色中选择一种随机颜色。

感谢您的帮助。

【问题讨论】:

  • 那些不是随机的颜色。这些是 12 种特定颜色。
  • 我的错,需要更好地定义问题。我想投票给你回答,但它被删除了。它起作用了,颜色并不完全相同,但对我来说这是一个非常好的开始。谢谢!
  • 在我意识到颜色并不完全是我列出的颜色后,我删除了我的答案。
  • 还是谢谢你! :) 你可能知道我将如何找到正确的值吗?例如,我怎么知道@X 是照片中的绿色中学?我会做剩下的:)
  • 抱歉,刚刚意识到色相值是个多么愚蠢的问题。谢谢!你的解决方案奏效了!

标签: ios objective-c colors


【解决方案1】:

这是使用您的确切颜色的复制/粘贴解决方案。

// Declare somewhere in your code
typedef struct _Color {
    CGFloat red, green, blue;
} Color;

static Color _colors[12] = {
    {237, 230, 4},  // Yellow just to the left of center
    {158, 209, 16}, // Next color clockwise (green)
    {80, 181, 23},
    {23, 144, 103},
    {71, 110, 175},
    {159, 73, 172},
    {204, 66, 162},
    {255, 59, 167},
    {255, 88, 0},
    {255, 129, 0},
    {254, 172, 0},
    {255, 204, 0}
};

- (UIColor *)randomColor {
    Color randomColor = _colors[arc4random_uniform(12)];
    return [UIColor colorWithRed:(randomColor.red / 255.0f) green:(randomColor.green / 255.0f) blue:(randomColor.blue / 255.0f) alpha:1.0f];
}

注意:您应该使用arc4random_uniform() 而不是arc4random() 以避免模偏差(尽管在这种情况下并不是那么重要)。

【讨论】:

  • 谢谢!我得到一个错误: - (UIColor *)randomColor { 行中未清除的标识符 randomColor。
  • 确保Color 结构和颜色的静态数组_colrors[12] 在-(UIColor *)randomColor 方法之前声明。最好在文件顶部的某个地方。
  • 非常感谢您的帮助。我似乎无法让它工作。仍然有同样的问题:/ undecleard identifier randomColor
  • 请确保您的代码的其余部分是正确的(所有括号都在适当的位置,等等)。尝试在您的代码中移动randomColor 方法,看看是否会出现另一个问题。我编译并运行了发布的解决方案代码,没有任何问题。
  • 是的,这就是问题所在(缺少括号)。抱歉,我是编码新手。非常感谢!有 2 个可行的解决方案 :)
【解决方案2】:

UIColor

下面是代码:

-(UIColor *)randomColor
{
   CGFloat hue = ( arc4random() % 256 / 256.0 );
   CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5;
   CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5;
   UIColor *color = [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
   return color;
}

【讨论】:

    【解决方案3】:

    这成功了:

    NSArray *hues = @[ @76, @98, @160, @217, @292, @318, @327, @21, @30, @41, @48, @58 ];
    NSNumber *hue = hues[arc4random_uniform(hues.count)];
    UIColor *color = [UIColor colorWithHue:[hue doubleValue] / 360.0 saturation:1.0 brightness:1.0 alpha:1.0];
    

    谢谢@Rmaddy

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-29
      • 2016-08-05
      • 1970-01-01
      • 2018-03-18
      • 2013-02-03
      • 2015-04-09
      • 2012-11-21
      相关资源
      最近更新 更多