如何在UIColor中获得随机的暖/冷颜色?

问题描述 投票:1回答:2

我想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
}

如何修改随机扩展名以选择随机的暖色或冷的随机色。

有什么建议吗?

ios swift uikit uicolor
2个回答
6
投票

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

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)
    }
}

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


0
投票

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

我建议这样做:

extension UIColor {
    static var warm: UIColor {
        let red: CGFloat = .random(in: 0.5...1)  /Force red to be at least 0.5
        let blue: CGFloat = .random(in: 0..<0.4) //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...0.5)  //Force blue to be small
        let red: CGFloat = .random(in: 0.6..<1.0) //Force red to be larger
        return UIColor(red: red, green: .random(in: 0...1), blue: blue, alpha: 1)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.