如何在 UIColor 中获得随机 warm/cold 颜色?

How to get random warm/cold color in UIColor?

我想randomly选择2种颜色。但它必须是随机 cold 颜色和随机 warm 颜色。

我正在使用这个 extension 随机取色:

extension UIColor {

    static var random: UIColor {
        return UIColor(red: .random(in: 0...1),
                       green: .random(in: 0...1),
                       blue: .random(in: 0...1),
                       alpha: 1.0)
    }
}

根据这个post,我们可以假设:

if (B > R) { 
    color = cool
} else { 
    color = warm
}

如何修改我的随机扩展程序以能够 select 随机暖色或随机冷色。

有什么建议吗?

如果您先生成数字,则可以在计算 red 时使用 blue 的值...

extension UIColor {
    static var warm: UIColor {
        let red: CGFloat = .random(in: 0...1)
        let blue: CGFloat = .random(in: 0..<red)
        return UIColor(red: red, green: .random(in: 0...1), blue: blue, alpha: 1)
    }

    static var cool: UIColor {
        let blue: CGFloat = .random(in: 0...1)
        let red: CGFloat = .random(in: 0..<blue)
        return UIColor(red: red, green: .random(in: 0...1), blue: blue, alpha: 1)
    }
}

这将满足您的要求,冷色是红色小于蓝色,暖色是蓝色小于红色。

Fogmeister的回答符合技术要求,但有一些问题。对于暖色,如果红色足够低,您将看不到它。暖色的蓝色成分可能与红色如此接近以至于没有可见差异等。

我建议改为:

extension UIColor {
    static var warm: UIColor {
        let red: CGFloat = .random(in: 0.6...1)  /Force red to be at least 0.6
        let blue: CGFloat = .random(in: 0..<0.5) //Force blue to be smaller
        return UIColor(red: red, green: .random(in: 0...1), blue: blue, alpha: 1)
    }

    static var cool: UIColor {
        let blue: CGFloat = .random(in: 0.6..<1.0)  //Force blue to be > 0.6
        let red: CGFloat = .random(in: 0...0.5) //Force red to be smaller
        return UIColor(red: red, green: .random(in: 0...1), blue: blue, alpha: 1)
    }
}