iOS:如何生成随机柔和的颜色?

时间:2016-04-14 08:20:59

标签: ios colors

如何为iOS生成漂亮的柔和色彩?

David Crow在Java中有一个非常好的答案:Algorithm to randomly generate an aesthetically-pleasing color palette

那么我们如何将其适应iOS?

2 个答案:

答案 0 :(得分:2)

John Coates的Swift实现出现在这里:https://gist.github.com/JohnCoates/725d6d3c5a07c4756dec但他错误地称之为"粉彩"虽然不包括所需的浅蓝色以达到这种效果。

我的John-git的目标-C版本(浅蓝色混合)在这里:

// Adapted from Stack Overflow answer by David Crow http://stackoverflow.com/a/43235
-(UIColor*) generateRandomPastelColor
{
    // Randomly generate numbers
    CGFloat red  = ( (CGFloat)(arc4random() % 256) ) / 256;
    CGFloat green  = ( (CGFloat)(arc4random() % 256) ) / 256;
    CGFloat blue  = ( (CGFloat)(arc4random() % 256) ) / 256;

    // Mix with light-blue
    CGFloat mixRed = 1+0xad/256, mixGreen = 1+0xd8/256, mixBlue = 1+0xe6/256;
    red = (red + mixRed) / 3;
    green = (green + mixGreen) / 3;
    blue = (blue + mixBlue) / 3;
    return [UIColor colorWithRed:red green:green blue:blue alpha:1];
}

修改

我改进了算法,通过将白色混合到计算中来使颜色更亮(通过在浅蓝色中加1,用3而不是2来潜水)。

以下是上述方法的测试代码(您可以替换新项目的 viewDidLoad 并运行):

#define RECT_SIZE 30

- (void)viewDidLoad {
    [super viewDidLoad];
    CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
    CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
    int horizontals = screenWidth / RECT_SIZE;
    int verticals = screenHeight / RECT_SIZE;
    float offset_h = ((int)screenWidth % RECT_SIZE)/2;
    float offset_v = ((int)screenHeight % RECT_SIZE)/2;
    for (int v=0; v < verticals; v++) {
        for (int h=0; h < horizontals; h++) {
            CGRect rect = CGRectMake(offset_h + h * RECT_SIZE, offset_v + v * RECT_SIZE, RECT_SIZE, RECT_SIZE);
            UIView *square = [[UIView alloc] initWithFrame:rect];
            square.backgroundColor = [self generateRandomPastelColor];
            [self.view addSubview:square];
        }
    }
}

答案 1 :(得分:0)

我已使用此代码设置了随机背景颜色。

    UIColor *bgColor = color ? color : [self randomColor];

    - (UIColor *)randomColor {

        srand48(arc4random());

        float red = 0.0;
        while (red < 0.1 || red > 0.84) {
            red = drand48();
        }

        float green = 0.0;
        while (green < 0.1 || green > 0.84) {
            green = drand48();
        }

        float blue = 0.0;
        while (blue < 0.1 || blue > 0.84) {
            blue = drand48();
        }

        return [UIColor colorWithRed:red green:green blue:blue alpha:1.0f];
    }