首页 文章

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

提问于
浏览
2

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

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

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

2 回答

  • 0

    John Coates的Swift实现出现在这里:https://gist.github.com/JohnCoates/725d6d3c5a07c4756dec但他错误地称之为"pastel",尽管不包括所需的浅蓝色以实现该效果 .

    我的John-git的Objective-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];
            }
        }
    }
    
  • 2

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

    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];
        }
    

相关问题