Я использую случайные пастельные цвета в своем тренировочном приложении (прыгающие круги), но когда мой 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
            )
        }
    })

}
0
Miko Lukasik 8 Ноя 2019 в 03:39

2 ответа

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

0
manman 8 Ноя 2019 в 05:11

Вы можете сделать что-то вроде этого:

var dynamicColor =  UIColor {(traitCollection: UITraitCollection) -> UIColor in
    if traitCollection.userInterfaceStyle == .dark {
        return .white
    } else {
        return .black
    }
}

Взято из курса Screencast на Рэя Вендерлиха (я не связан с сайтом): https://www.raywenderlich.com/3979883-dark-mode-deep-dive

0
Marwan 2 Дек 2019 в 18:17