美文网首页
iOS—暗黑模式

iOS—暗黑模式

作者: 如hua | 来源:发表于2020-04-03 14:08 被阅读0次

    从iOS13推出以后,暗黑模式难免成为一个热点的话题,特别是微信新版本更新支持暗黑模式以后,相信iOS开发者都有必要掌握如何在自己的项目中支持它。

    适配暗黑模式主要从以下几个方面着手:
    • 颜色

    • 图片

    1、颜色适配

    • iOS13 之前 UIColor只能表示一种颜色,而从 iOS13 开始UIColor是一个动态的颜色,在Light Mode和Dark Mode可以分别设置不同的颜色。

    • iOS13系统提供了一些动态颜色,不过日常开发中,我们很少用到系统的颜色。比如说placeholderTextColor,就可以使用[UIColor placeholderTextColor]直接表示输入框提示文字颜色,系统会根据当前的模式自动切换。

    自定义动态UIColor

    iOS13 UIColor增加了两个初始化方法,使用以下方法可以创建动态UIColor

    注:一个是类方法,一个是实例方法

    
    +(UIColor*)colorWithDynamicProvider:(UIColor*(^)(UITraitCollection*))dynamicProviderAPI_AVAILABLE(ios(13.0),tvos(13.0))API_UNAVAILABLE(watchos);
    -(UIColor*)initWithDynamicProvider:(UIColor*(^)(UITraitCollection*))dynamicProviderAPI_AVAILABLE(ios(13.0),tvos(13.0))API_UNAVAILABLE(watchos);
    
    
    • 这两个方法要求传一个block进去

    • 当系统在LightMode和DarkMode之间相互切换时就会触发此回调

    • 这个block会返回一个UITraitCollection类

    • 我们需要使用其属性userInterfaceStyle,它是一个枚举类型,会告诉我们当前是LightMode还是DarkMode

    使用方法
    
            label.textColor=UIColor.init(dynamicProvider: { (trait) ->UIColor **in**
    
                **if **trait.userInterfaceStyle== .light {
    
                    **return **UIColor.black
    
                }
    
                **return **UIColor.white
    
            })
    
    
    
            self.view.backgroundColor=UIColor.init(dynamicProvider: { (trait) ->UIColor in
    
                if trait.userInterfaceStyle== .dark {
    
                    returnUIColor.black
    
                }
    
                **return**UIColor.white
    
            })
    
    
    效果
    image image

    2、图片适配

    • 打开Assets.xcassets

    • 新建一个Image set

    • 打开右侧工具栏,点击最后一栏,找到Appearances,选择Any,Dark,如图

    image

    *使用该图片

    
    [_logoImage setImage:[UIImage imageNamed:@"icon_logo"]];
    
    
    image image

    获取当前系统模式

    如果需要知道当前处于什么模式,并根据不同的模式执行不同的操作,iOS13中CGColor依然只能表示单一的颜色,通过调用UITraitCollection.currentTraitCollection.userInterfaceStyle,获取当前模式

    
          if UITraitCollection.current.userInterfaceStyle == .dark {
    
              print("当前为深色模式")
    
          }else{
    
              print("当前为浅色模式")
    
          }
    
    

    希望对您有所帮助。

    相关文章

      网友评论

          本文标题:iOS—暗黑模式

          本文链接:https://www.haomeiwen.com/subject/shphphtx.html