发布时间:2024-02-27 10:35:07 浏览量:191次
苹果今年早些时候宣布在iOS上使用“暗模式”,该模式为用户提供了选择系统范围内的浅色或深色外观的选项。它从iOS 13开始可用。但是,如果您对iOS的采用率不满意,仍然需要支持旧版本的iOS。在本文中,我们来看看如何介绍适用于所有iOS版本(包括iOS 13)的黑暗模式。
应该指出的是,采用暗模式(或暗主题)并不是一件容易的事,因为乍一看。因此,在继续前进之前,需要进行一些准备。在UI代码中引入一些结构并定义应用程序范围的调色板,字体,UI元素样式等是有意义的。
我建议您观看WWDC 上有关在iOS上实现暗模式的话题,并查看文档以概述此功能以及UIKit中引入的相关更改。NSHipster上还发布了有关如何使您的应用程序为黑暗模式做好准备的很好的指南。
我们应该做的第一件事就是声明一个主题类型。它定义了一种可以应用于整个应用程序的样式,并指定了每个视图的外观细节。该Theme结构包含一个嵌套的Type枚举和两个存储主题类型和调色板的属性:
假设我们在项目中定义了一个调色板。然后,我们可以创建明暗主题:
接下来,我们将需要一种跟踪当前应用程序主题并提供订阅当前主题更改的方法。为此,我们将声明一个ThemeProvider类,该类将当前主题存储在中UserDefaults,保留主题观察者NSHashTable并在当前主题发生更改时通知它们:
有了上面提到的代码,我们现在可以更新我们的应用程序并使其在黑暗和明亮模式下都能工作。我们可以从更新所有UI组件开始,例如视图控制器,单元格,控件等,以符合Themeable协议并在apply(theme:)方法中更新其外观。要收听主题更改,我们应该通过register(observer:)从ThemeProvider类调用方法来注册观察者。可以为视图控制器完成以下操作:
除此之外,还应该有一个设置屏幕,用户可以在其中打开和关闭暗模式。使用Gagat库甚至可以更好地完成此操作,并可以使用两指平底锅以交互方式在iOS应用程序中的两个不同主题之间进行切换。最后,我们应该获得对iOS 12上运行的应用程序的暗模式支持。
在iOS 13中,Apple提供了系统范围的暗模式支持。现在,我们可以在资产目录中创建颜色和图像,并为暗模式指定其他外观。最终,当用户从“设置”打开暗模式时,可以自动更新应用程序的UI。在某些情况下,您可能想检测外观变化并相应地更新UI。这可以通过traitCollectionDidChange(_:)在任何符合UITraitEnvironment协议的UIKit类中实现方法来实现。考虑到所有这些因素,我们应该在当前解决方案中进行一些调整。
利用动态颜色,我们可以定义自适应调色板和主题:
在ThemeProvider我们之前描述不会在iOS 13.运行我们可以宣布一个新的应用程序很好地工作DefaultThemeProvider类,并让两个提供符合ThemeProvider协议:
接下来,我们需要一种ThemeProvider基于当前iOS版本选择实现的方法:
实施该功能后,我们应该获得对iOS 13上运行的应用程序的暗模式支持。
苹果今年早些时候宣布在iOS上使用“暗模式”,该模式为用户提供了选择系统范围内的浅色或深色外观的选项。它从iOS 13开始可用。但是,如果您对iOS的采用率不满意,仍然需要支持旧版本的iOS。在本文中,我们来看看如何介绍适用于所有iOS版本(包括iOS 13)的黑暗模式。
应该指出的是,采用暗模式(或暗主题)并不是一件容易的事,因为乍一看。因此,在继续前进之前,需要进行一些准备。在UI代码中引入一些结构并定义应用程序范围的调色板,字体,UI元素样式等是有意义的。
我建议您观看WWDC 上有关在iOS上实现暗模式的话题,并查看文档以概述此功能以及UIKit中引入的相关更改。NSHipster上还发布了有关如何使您的应用程序为黑暗模式做好准备的很好的指南。
我们应该做的第一件事就是声明一个主题类型。它定义了一种可以应用于整个应用程序的样式,并指定了每个视图的外观细节。该Theme结构包含一个嵌套的Type枚举和两个存储主题类型和调色板的属性:
假设我们在项目中定义了一个调色板。然后,我们可以创建明暗主题:
为了能够使用当前主题更新我们的UI组件,应该有一个所有这些协议都遵循的协议。这可以通过以下Themeable协议来实现:
接下来,我们将需要一种跟踪当前应用程序主题并提供订阅当前主题更改的方法。为此,我们将声明一个ThemeProvider类,该类将当前主题存储在中UserDefaults,保留主题观察者NSHashTable并在当前主题发生更改时通知它们:
有了上面提到的代码,我们现在可以更新我们的应用程序并使其在黑暗和明亮模式下都能工作。我们可以从更新所有UI组件开始,例如视图控制器,单元格,控件等,以符合Themeable协议并在apply(theme:)方法中更新其外观。要收听主题更改,我们应该通过register(observer:)从ThemeProvider类调用方法来注册观察者。可以为视图控制器完成以下操作:
除此之外,还应该有一个设置屏幕,用户可以在其中打开和关闭暗模式。使用Gagat库甚至可以更好地完成此操作,并可以使用两指平底锅以交互方式在iOS应用程序中的两个不同主题之间进行切换。最后,我们应该获得对iOS 12上运行的应用程序的暗模式支持。
在iOS 13中,Apple提供了系统范围的暗模式支持。现在,我们可以在资产目录中创建颜色和图像,并为暗模式指定其他外观。最终,当用户从“设置”打开暗模式时,可以自动更新应用程序的UI。在某些情况下,您可能想检测外观变化并相应地更新UI。这可以通过traitCollectionDidChange(_:)在任何符合UITraitEnvironment协议的UIKit类中实现方法来实现。考虑到所有这些因素,我们应该在当前解决方案中进行一些调整。
利用动态颜色,我们可以定义自适应调色板和主题:
在ThemeProvider我们之前描述不会在iOS 13.运行我们可以宣布一个新的应用程序很好地工作DefaultThemeProvider类,并让两个提供符合ThemeProvider协议:
接下来,我们需要一种ThemeProvider基于当前iOS版本选择实现的方法:
实施该功能后,我们应该获得对iOS 13上运行的应用程序的暗模式支持。
在本文中,我们探索了如何通过实现可在包括iOS 13在内的所有iOS版本上使用的深色模式来使您的应用看起来更漂亮。我们在此描述的解决方案可以轻松扩展。您可以在Github上找到演示项目的源代码。
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:810733363。微信:18173184023。不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。
关注+转发然后私信回复 “08” 获取学习资料。
来源:本文为第三方转载,如有侵权请联系小编删除。
!
热门资讯
想要了解iPhone6界面设计的尺寸规范吗?这里为您详细介绍iPhone6的UI设计尺寸规范,包括界面尺寸、图标尺寸、可点击高度规范、搜索栏高度规范以及界面元素之间的距离规范。
将为大家介绍12个绝佳的UI设计网站,这些网站不仅可以为你提供灵感,还可以帮助你学习新的技巧,助力你的创意之旅!dribbbleDribbble 是一个面向设计师的...
3. 移动端UI设计中常见的5种APP界面类型,你get到了吗?
通过介绍移动端UI设计中的闪屏页、引导页、浮层引导页、空白页和首页等5种APP界面类型,帮助大家更好地了解UI设计的基本知识
怎样可以提升你的UI设计能力!第一个:站酷站酷想必是设计师都知道的一个网站,里面不止有UI设计的资源,还有其他设计的,不如:平面设计、网页设计、字体...
在移动端设计中,列表页和表单页是不可或缺的部分。一个好的列表页和表单页设计能够让用户轻松地获取信息并产生点击欲望,从而提高点击率。本文将为你...
对于想要提高自己的设计能力和创造力的小白和UI设计师来说,这本书是一个很好的选择。4.《设计的觉醒》(IKKO TANAKA)推荐理由: 这本书是日本现代平面...
探索零基础UI设计培训的时长与薪资前景。了解数字艺术教育领域的专业课程,以及培训后的职业发展机会。
8. 设计中的色彩心理学:浅析中西方色彩的历史演变与设计应用
摘要:本文探讨了色彩的历史演变和设计应用。通过对色彩在早期文明社会中的实用运用、不同文化背景下色彩观念的差异、色彩在设计中的重要性以及新兴技...
ui设计应该让用户一目了然,能够快速找到所需的信息和功能。在设计过程中,应尽量使用简洁的图标、文字和色彩,避免过多的视觉干扰。符合用户习惯:ui设...
10. 武汉UI设计培训班费用怎么样?想学UI设计要多少钱?
想了解武汉UI设计培训班的费用是多少吗?不知道学UI设计要花多少钱?不妨看看这篇文章,了解UI设计培训班的学费价格以及学习内容。
最新文章
同学您好!