5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ダークモード対応で便利なやつ

Last updated at Posted at 2019-09-20

コードからダークモードに対応する色を指定するのが記述量多くて大変だったので、まさに convenience な extension を書きました

※ 以下 if #available(iOS 13, *) な分岐は省いて書きます

前提

iOS 13からのダークモード対応のコツ などで
class func dynamicColor(light: UIColor, dark: UIColor) -> UIColor
と定義しているのを真似していたのですが、今後 UIColor を使うときは、ほぼ dynamicProvider 使うかなーと思って init に寄せました

extension UIColor {
    convenience init(light: UIColor, dark: UIColor) {
        self.init {
            if $0.userInterfaceStyle == .dark {
                return dark
            } else {
                return light
            }
        }
    }
}

let color = UIColor.dynamicColor(...) って書くか
let color = UIColor(...) って書くかの違いなので好みの問題かなと

グレースケール

extension UIColor {
    convenience init(dynamicWhite white: CGFloat, alpha: CGFloat) {
        self.init(
            light: UIColor(white: white, alpha: alpha),
            dark: UIColor(white: 1 - white, alpha: alpha)
        )
    }
}

とすることで

let color = UIColor(light: UIColor(white: 0.8, alpha: 1), dark: UIColor(white: 0.2, alpha: 0.1))

と指定していた箇所が

let color = UIColor(dynamicWhite: 0.8, alpha: 1))

となります

HSB

extension UIColor {
    convenience init(hue: CGFloat, saturation: CGFloat, dynamicBrightness brightness: CGFloat, alpha: CGFloat) {
        self.init(
            light: UIColor(hue: hue, saturation: saturation, brightness: brightness, alpha: alpha),
            dark: UIColor(hue: hue, saturation: saturation, brightness: 1 - brightness, alpha: alpha)
        )
    }
}

とすることで

let color = UIColor(
    light: UIColor(hue: 0, saturation: 0.8, brightness: 0.9, alpha: 1),
    dark: UIColor(hue: 0, saturation: 0.8, brightness: 0.1, alpha: 1)
)

と指定していた箇所が

let color = UIColor(hue: 0, saturation: 0.8, dynamicBrightness: 0.9, alpha: 1))

となります

disclaimer

ちゃんと色を定義している場合には使えるケースは限られるかもしれませんが、サクッと確認してみるには便利!

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?