APP动态换肤解决方案

Related tags

UI theme swift ios skin ui
Overview

CJSkinSwift

使用说明

pod  'CJSkinSwift'  #pod导入

//导入换肤模块
import CJSkinSwift

一、静态换肤

let button = UIButton.init()
//设置颜色
button.backgroundColor = SkinColor("背景色")
//设置图片
button.setImage(SkinImage("按钮", nil), for: .normal)
//设置字体
button.titleLabel?.font = SkinFont("标题")

二、动态换肤

在NSObject分类的扩展属性 refreshSkin 内设置换肤:

let button = UIButton.init()
button.refreshSkin = { (weakSelf: NSObject) in
    let wSelf = (weakSelf as! UIButton)
    wSelf.backgroundColor = SkinColor("背景色")
    wSelf.titleLabel?.font = SkinFont("标题")
    //设置图片的渲染模式为展示原图;并且设置afterDownloadRefreshSkinTarget=wSelf,使得在线图片“按钮”、“按钮高亮”下载完成后将回调refreshSkin()进行UI换肤
    wSelf.setImage(SkinImageRenderingMode("按钮", .alwaysOriginal, wSelf), for: .normal)
    wSelf.setImage(SkinImageRenderingMode("按钮高亮", .alwaysOriginal, wSelf), for: .highlighted)
}

三、皮肤资源说明

换肤资源使用 CJSkin.plist(文件名固定)来配置管理换肤信息,CJSkin.plist实质上是一个xml文件,它里面用字典记录了不同皮肤包的资源信息。例如下图所示:当前项目的CJSkin.plist文件内记录了default、skin1、skin2三个皮肤包,每个皮肤包内固定包含 Color 颜色、Image 图片、Font 字体三类皮肤元素的信息。

注意:CJSkin.plist中 default 皮肤包名,资源key: ColorImageFont 以及Font中的 NameSize 这些key值的名称是固定的,配置时不能写错!

CJSkin.plist

另外项目中还有 default.bundleskin1.bundleskin2.bundle 等文件夹,分别用于存储不同皮肤包下各自的图片,并且 .bundle文件夹名字要与CJSkin.plist中配置的皮肤包名对应。default.bundle存储的是默认皮肤资源,你也可以不加入default.bundle而是把图片存储在 Assets.xcassets 中,但CJSkin.plist中 default 皮肤的配置说明不能缺失。

  • 不同皮肤包 Color 字典中的key相同值不同:比如default皮肤包中 导航背景色 值为0x996666,skin2皮肤包中 导航背景色 的值为0x454545。
  • Image 的说明同理,比如default和skin2皮肤包都在CJSkin.plist中对图片 top 进行了配置说明,它们分别指向了不同的在线url;不同皮肤包的图片还可以放到各自的 .bundle 文件夹内,同时在CJSkin.plist中声明图片别名。比如skin1.bundle中包含图片[email protected][email protected],它在CJSkin.plist的配置为 {"Image":{"top":"top.png"}} ,也可以CJSkin.plist中不做配置,而是在获取图片的时候key直接等于 skin1.bundle文件夹中存储的图片名 top
  • Font 的配置说明也是一样,不同皮肤包的key相同,值为包含 Name、Size 两个固定key的字典,Name为空则使用系统默认字体,Size表示了字号大小。

换肤资源管理

组件模块说明

  • CJSkinSwift.swift 皮肤包信息管理类,可获取当前皮肤包信息、更换皮肤包、删除指定皮肤包、下载并更新皮肤包(下载的json数据结构参照 CJSkin.plist 文件说明)等功能。

  • CJSkinTool.swift 获取皮肤资源工具类,换肤所需的颜色、图片、字体等只能通过该类转换获取,其中提供了丰富的便捷获取资源方法。

CJSkinSwift换肤流程

换肤流程

You might also like...
Owner
lele8446
iOS Developer
lele8446