Можно ли инициализировать UIColor с помощью темного и светлого режима? - PullRequest
0 голосов
/ 08 ноября 2019

Я использую случайные пастельные цвета в моем учебном приложении (прыгающие круги), но когда мой iPad находится в темном режиме, пастель выглядит очень мягко. Можно ли как-то инициализировать UIColor двумя цветами? Может быть что-то вроде:

UIColor(forLightMode: UIColor, forDarkMode: UIColor)

Мое текущее приложение правильно создает новые цвета, но они не меняются автоматически, когда я переключаюсь из темного в светлый режим. Приложение только начинает генерировать новые из набора pastel.

func makeRandomColor() -> UIColor {

    let fullRange : ClosedRange<CGFloat> = 0...255
    let pastelRange : ClosedRange<CGFloat> = 127...255

    let randomPastelRed     = CGFloat.random(in: pastelRange) / 255
    let randomPastelGreen   = CGFloat.random(in: pastelRange) / 255
    let randomPastelBlue    = CGFloat.random(in: pastelRange) / 255

    let randomRed           = CGFloat.random(in: fullRange) / 255
    let randomGreen         = CGFloat.random(in: fullRange) / 255
    let randomBlue          = CGFloat.random(in: fullRange) / 255

    let randomAlpha         = CGFloat.random(in: 0.6...1)

    return UIColor.init(dynamicProvider: { traitCollection in
        if traitCollection.userInterfaceStyle == .dark {
            return UIColor(
                red: randomRed,
                green: randomGreen,
                blue: randomBlue,
                alpha: randomAlpha
            )
        } else {
            return UIColor(
                red: randomPastelRed,
                green: randomPastelGreen,
                blue: randomPastelBlue,
                alpha: randomAlpha
            )
        }
    })

}

1 Ответ

0 голосов
/ 08 ноября 2019

Вам нужно будет прослушать traitCollectionDidChange уведомление и перерисовать свой пользовательский интерфейс, вызвав setNeedsLayout() или аналогичные методы из UIView или UIViewController. Для получения дополнительной информации проверьте Реализация темного режима на iOS ~ 22мин

...