Как получить случайный теплый / холодный цвет в UIColor? - PullRequest
1 голос
/ 20 января 2020

Я бы хотел 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
}

Как я могу изменить свое случайное расширение, чтобы иметь возможность выбирать случайный теплый цвет или случайный холодный цвет.

Любые советы

Ответы [ 2 ]

6 голосов
/ 20 января 2020

Если вы сначала сгенерируете свои числа, вы можете использовать значение 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)
    }
}

Это удовлетворит ваше требование к прохладному красному меньше чем синий и теплый синий меньше красного.

2 голосов
/ 21 января 2020

Ответ Fogmeister соответствует техническому требованию, но имеет некоторые проблемы. Для теплого цвета, если красный достаточно низок, вы не увидите его. Синий компонент теплого цвета может быть настолько близок к красному, что нет видимой разницы, и т. Д. c.

Я бы предложил вместо этого:

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