其他分享
首页 > 其他分享> > ios 深色模式

ios 深色模式

作者:互联网

深色模式

从iOS 13开始,用户克在系统级别把外观修改深色模式。深色模式与传统浅色模式相比,有以下优点

那么如何让我们的app支持深色模式呢?

ios语义色号

对于深色模式的支持,苹果推荐使用语义话颜色来进行适配。
什么是语义色呢?
语义色是我们根据用途定义颜色的名字,如使用背景上的颜色定义为backgroundColor,文本和富文本颜色分别定义为primaryTextColor,secondaryTextColor.UI可以通过语义色来灵活适配用户选择的外观模式。如深色模式下颜色为白色或其他亮色,浅色模式下为黑色等。

为了简化深色模式的适配过程,苹果提供了具有语义的系统色(System colors)和动态系统色(Dynamic System colors)供我们使用,可通过官方文档查看
系统颜色
在这里插入图片描述
上图是苹果开发者文档提供的一个系统色,他们在浅色模式和深色模式下RGB会有不同的值,这样就能保证在不同的外观模式下颜色都能清晰的显示

在这里插入图片描述
上图显示的是ios系统提供的动态系统色的定义。他们通过用途来定义各种颜色的名称。如label用于主标签的颜色,而Secondary label用于副标签的文字颜色,使用他们就能自动支持不同颜色的外观模式了。

自定义语义色

虽然苹果提供了很多系统、动态颜色,但通常公司设计都会有一套自己的设计规则和颜色体系。关使用苹果提供的颜色是不够的。下面就是为我们自己定义一套语义色;
可通过UITraitCollection类获取到当前对象,获得当前颜色模式动态使用颜色,为方便使用,定义如下方法

static private func dynamicColor(light:UIColor,dark:UIColor)->UIColor{

            return UIColor { collection in
                return collection.userInterfaceStyle == .light ? light : dark
            }
        }

扩展类如下



import UIKit
public extension UIColor {
    static let colorPalette = ColorPalette.self
    enum ColorPalette {

        public static let primaryTextColor: UIColor = dynamicColor(light: UIColor(hex: 0x0770e3), dark: UIColor(hex: 0x6d9feb))
        public static let backgroundColor: UIColor = dynamicColor(light: .white, dark: .black)

        static private func dynamicColor(light:UIColor,dark:UIColor)->UIColor{

            return UIColor { collection in
                return collection.userInterfaceStyle == .light ? light : dark
            }
        }
    }
}
public extension UIColor {
    convenience init(hex: Int) {
        let components = (
                R: CGFloat((hex >> 16) & 0xff) / 255,
                G: CGFloat((hex >> 08) & 0xff) / 255,
                B: CGFloat((hex >> 00) & 0xff) / 255
        )
        self.init(red: components.R, green: components.G, blue: components.B, alpha: 1)
    }
}

标签:深色,颜色,light,ios,模式,UIColor,语义
来源: https://blog.csdn.net/fengyuyxz/article/details/120653873