• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-12 19:22:50 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

David Crow 在 Java 中有一个出色的多彩答案:Algorithm to randomly generate an aesthetically-pleasing color palette

那么我们如何让它适应 iOS 呢?



Best Answer-推荐答案


John Coates 的 Swift 实现出现在这里:https://gist.github.com/JohnCoates/725d6d3c5a07c4756dec但他错误地将其称为“粉彩”,尽管不包括实现该效果所需的浅蓝色。

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

关于iOS:如何生成随机柔和的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36617427/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap