iOS的换肤方法和装置与流程

文档序号:24751351发布日期:2021-04-20 23:42阅读:480来源:国知局
iOS的换肤方法和装置与流程
ios的换肤方法和装置
技术领域
1.本发明涉及一种ios的换肤方法,本发明还涉及一种ios的换肤装置。


背景技术:

2.ios是由苹果公司开发的移动操作系统,于2007年1月9日发布。苹果在ios13之后推出了黑暗模式,在黑暗模式下,背景和文字颜色需要反转,但传统的换肤组件只有简单的图片更换功能,功能比较单一。ios13之后苹果给出了自己的黑暗模式适配方案,但是含有一些换肤功能的应用为了适配黑暗模式,需要对原有换肤组件做很大的改动,并且在面临一些三方ui组件时,存在不便于对源码进行修改的问题,整体维护成本过高。
3.如在一些实现中,针对预定的ui(user interface,即用户界面),首先获取换肤的初始图像,并基于初始图像的每一个像素单元的颜色将初始图像划分成多个色块区域,进而获取用户选择的色调风格信息,根据用户选择的色调风格信息为每一个色块区域选择合适的替代颜色,从而经过替代后获得目标图像。其中的替代颜色是ui自定义的颜色,获取合适的替代颜色的过程会对ui的原生类产生过多的侵入,具体是需要被赋予权能,而能够调用ui自定义的颜色和图片并按照ui框架所包含类对目标图像进行赋值;同时,可扩展性受ui自身属性的限制而相对较差。


技术实现要素:

4.在本发明的实施例中提供了一种ios的换肤方法,以期减少对ui的侵入,并具有较好的可扩展性;本发明的实施例中还提供了一种ios的换肤装置。
5.在本发明的实施例中,提供了一种ios的换肤方法,针对给定的ui,为该ui添加分类,用以设置皮肤组件中的图片、颜色的参数,绑定皮肤组件、皮肤标识后存放于预设的可变字典中;监听皮肤切换命令;若监听到皮肤切换命令,响应该切换命令确定的皮肤标识,从可变字典中查询到相应的参数,调用查询到的参数,为各皮肤组件赋值。
6.可选地,采用ui原有的赋值方法为各组件皮肤进行赋值。
7.可选地,所述可变字典为数据表;相应地,皮肤组件作为键构成数据表的横向;皮肤标识构成数据表的纵向;数据表内存放与键相应的值,形成键

值对。
8.可选地,键为ui原有类中赋值方法转换的字符串。
9.可选地,所述分类为相对于ui已有分类添加的配置模块。
10.可选地,所述配置模块封装了颜色工具类和图片工具类,适配为颜色配置模块和图片配置模块。
11.可选地,图片工具类为单例类。
12.可选地,在给定的ui初始化时,对所述配置模块进行解析,将解析出的图片、颜色参数存入可变字典中,以备调用。
13.可选地,图片工具类所封装的图片按照指定的标准进行命名,且关闭名称修改权限。
14.在本发明的实施例中,还提供了一种ios的换肤装置,其包括:配置单元,该配置单元针对给定的ui,为该ui添加分类,用以设置皮肤组件中的图片、颜色的参数,绑定皮肤组件、皮肤标识后存放于预设的可变字典中;监听单元,用于监听皮肤切换命令;切换单元,若监听到皮肤切换命令,响应该切换命令确定的皮肤标识,从可变字典中查询到相应的参数,调用查询到的参数,为各皮肤组件赋值。
15.在本发明的实施例中,为了减少对原生类的侵入性,增加后期的可扩展性,通过增加分类的方式配置皮肤组件的颜色和图片,赋值则直接采用ui的原生类进行赋值,从而不必对ui原生类中的图片制式等进行解析,减轻了对原生类的侵入性。而添加分类相对于原生类,受到的约束减少,可扩展性增强。
附图说明
16.图1为一实施例中ios的换肤方法流程图。
具体实施方式
17.应知,ui是与用户接触最紧密的对象,是对软件的人机交互、操作逻辑、界面美观的整体设计。由于其是用户与手机、计算机、中控等交互的窗口,而对个性化、舒适性有更高的要求,强调视觉元素的组织和呈现,因此,ui的皮肤是软件图形设计师的主要设计对象。
18.应知,ui框架由类组成,ui设计软件提供了丰富的类,如基础ui窗体类(父类)、ui管理器、ui遮罩管理、窗体类型等主类,再如颜色工具类、图片工具类等工具类,以及其他丰富的分类。
19.在本发明的一些实施例中,基于objective

c的动态语言特性和kvo观察者模式,对目标ui的换肤组件重新设计,即对目标ui添加类,而不是直接调用ui自身的换肤组件。
20.为了应对更多场景下,颜色和图片可能需要分开单独设置的问题,在本发明的实施例中将换肤模块分为颜色、图片两种,分开设置。
21.针对不同皮肤组件的颜色、图片,进行统一标准的制定,形成标准体系。按照统一确定的标准,针对不同的皮肤组件生成对应的颜色配置文件和皮肤配置文件。然后将这些皮肤配置文件和对应的图片资源文件放入工程中,留待相应ui初始化时解析。
22.图片资源文件中所包含的图片需要按照已经制定的标准进行命名,不可随意更改。
23.ui的程序初始化阶段,需要对换肤组件进行初始化,需要指定首次安装时的默认皮肤,同时解析所述颜色配置文件和皮肤配置文件,将相应的图片资源存放到指定的位置。要用到换肤功能的组件需要调用换肤组件已经提供的方法,也就是与ui自身的原生类中相应的换肤方法去设置对应的颜色或图片,减少换肤设计的工作量。
24.如果仅是肤色的修改,可以直接调用颜色配置文件,根据用户的指令传入定义好
的肤色标识所对应的颜色值,对肤色进行赋值。
25.在本发明的实施例中,单就换肤方法而言,其所对应的框架主要由一个主类,几个工具类,和多个分类来实现。
26.其中,主类主要用来对皮肤组件进行初始化配置,皮肤切换,以及皮肤的定义。
27.工具类主要由两个部分组成,其中一个是颜色工具类,另一个是图片工具类。因为设置背景色、文字色彩等用到颜色的地方比较多,多次解析颜色配置文件会存在性能问题,因此,优选地,颜色工具类被设计为一个单例类,初始化时解析和并在指定的位置存储皮肤配置信息。
28.单例类由软件设计模式中的单例模式所创建,通过单例模式的方法创建的类在当前进程中只有一个实例。对于框架中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或id(序号)生成器。如在windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解,不知道哪一个才是真实的状态。因此有时确保系统中某个对象的唯一性即一个类只能有一个实例非常重要。
29.关于颜色配置文件,在一些实施例中,将其配置为一个txt文件,需要按照给定的格式进行编辑,形成一个模拟的表格格式。该表格格式的横向是定义的键(key),比如键可以是headertitlecolor;表格格式的竖向是皮肤标识,如dark,normal;表格内的内容就是对应肤色下不同键所对应的色值。
30.颜色工具类初始化时会对颜色配置文件进行解析,将解析到的内容存入指定的可变字典中。图片工具类主要实现根据拼接图片文件名去查找对应皮肤下的图片,相应提供一个plist配置文件,该plist配置文件里面主要包含了不同肤色下的图片命名格式。plist文件皮肤标识为键,值(value)是可变字典的元素,里面包含皮肤中文名,图片后缀名。
31.进一步地,切换皮肤主要是通过分类实现,为了减少对原生类的侵入性,增加后期可维护性和可扩展性,在原有类的基础上,通过扩展分类来实现。相应地,为nsobject(objc中大多数类的基类,大多数的类都继承于该基类)添加了一个分类,通过属性绑定,具体是nsobject绑定了一个名为pickers的可变字典,同时添加了一个监听器themechange。pickers初始化方法中设置了监听,监听皮肤变化,监听到皮肤变化时会调用themechange。
32.进一步地,对要实现换肤功能的ui组件添加分类。比如:uibutton原生类存在settitlecolor:forstate分类,用来设置按键标题色。相应地,所添加分类包括一个th_settitlecolorpicker:forstate分类。相应的颜色、图片等相关的参数,区别于原生类,替换成定义好的代码块(block),这里的colorpicker就是定义好的代码块。该代码块内的代码实现是给ui组件的图片或颜色重新赋值。
33.进而,当用户打算给uibutton设置按键标题色时,不再调用settitlecolor:forstate类,而是调用前述的通过分类扩展的th_settitlecolorpicker:forstate类。然后th_settitlecolorpicker:forstate方法在实现时,除了调用原类中存在的方法settitlecolor:forstate类进行赋值之外,将传入的参数(即colorpicker代码块和state
参数)存储到pickers可变字典中,其中键是对应原类中赋值方法转换的字符串,即settitlecolor:forstate类,值是传入的b代码块(代码块定义时包含一个参数即皮肤标识)。然后在对应的uibutton分类中继承nsobject分类中定义好的themechange类,遍历pickers列表,根据当前皮肤标识找到对应的颜色或图片之后,然后取出对应的代码块,在代码块内根据键取到的原类方法名,重新调用原生类进行赋值。
34.概括而言:所有继承于nsobject的对象,只要初始化了pickers这个属性,那么它就会设置皮肤切换的监听。当监听器接收到皮肤切换通知之后,调用自身实现的themechange方法,通过遍历pickers这个可变字典,找到对应的皮肤或图片,调用存入的block代码块并传入当前皮肤标识,重新调用原类赋值方法进行重新赋值。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1