iOS开发--换肤简单实现以及工具类的抽取
一.根据美工提供的图片,可以有两种换肤的方案.
<1>美工提供图片的类型一:

<2>美工提供图片的类型二:这种分了文件夹文件名都一样的情况,拖入项目后最后用真实文件夹(蓝色文件夹).因为项目中的黄色文件夹都是虚拟不存在的,同名的文件只会保留一个

勾选第二个:

二.工具类的抽取 -- 以第二种图片的方案为前提,抽取的工具类
- 头文件的实现

- .m文件的实现
#import "SkinTool.h" /** 当前皮肤色系 */
static NSString *_currentSkin; @implementation SkinTool
// 初始化工具类时,给_currentSkin初始值
+ (void)initialize
{
[super initialize];
// 偏好设置中没有值,皮肤默认给一个色系
_currentSkin = [[NSUserDefaults standardUserDefaults] objectForKey:@"CurrentSkin"];
if (_currentSkin == nil) {
_currentSkin = @"blue";
}
} + (void)setCurrentSkinColor:(NSString *)skin
{
_currentSkin = skin;
// 将当前的皮肤色系存放到偏好设置中
[[NSUserDefaults standardUserDefaults] setObject:skin forKey:@"CurrentSkin"];
} + (UIImage *)skinToolWithImageName:(NSString *)imageName
{
// 拼接当前皮肤色系图片在mainBundle中的位置
NSString *imagePath = [NSString stringWithFormat:@"skin/%@/%@",_currentSkin,imageName];
UIImage *image = [UIImage imageNamed:imagePath];
return image;
} + (UIColor *)skinToolWithLabelColor
{
// 拼接plist文件在mainBundle中的相对位置
NSString *plistPath = [NSString stringWithFormat:@"skin/%@/bgColor.plist",_currentSkin];
NSString *path = [[NSBundle mainBundle] pathForResource:plistPath ofType:nil];
// 加载plist,获取存放rgb的字典
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
NSString *rgbString = dict[@"labelBgColor"];
// 分割rgb字符串
NSArray *rgbArr = [rgbString componentsSeparatedByString:@","];
NSInteger red = [rgbArr[] integerValue];
NSInteger green = [rgbArr[] integerValue];
NSInteger blue = [rgbArr[] integerValue];
// 返回颜色
return [UIColor colorWithRed:red / 255.0 green:green / 255.0 blue:blue / 255.0 alpha:1.0];
}
@end - 注意:控制文字颜色或者label背景颜色之类,是在每个色系文件夹中定义了plist文件,文件中规定了RGB



- 外界调用工具类的时候,容易出现的错误(项目中出现在TabBar控制器情况下) -- 原因在于TabBar控制器的View是懒加载的,如果将设置皮肤类的代码写在ViewDidLoad中,默认只会执行一次;!!!!!!解决方案:将代码写在ViewWillAppear中

出现错误的图解:

iOS开发--换肤简单实现以及工具类的抽取的更多相关文章
- iOS开发一个制作Live Photo的工具
代码地址如下:http://www.demodashi.com/demo/13339.html 1.livePhoto简介 livePhoto是iOS 9.0 之后系统相机提供的拍摄动态照片的功能,但 ...
- iOS开发网络篇—简单介绍ASI框架的使用
iOS开发网络篇—简单介绍ASI框架的使用 说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大 ...
- iOS开发UI篇—简单的浏览器查看程序
iOS开发UI篇—简单的浏览器查看程序 一.程序实现要求 1.要求 2. 界面分析 (1) 需要读取或修改属性的控件需要设置属性 序号标签 图片 图片描述 左边按钮 右边按钮 (2) 需要监听响应事件 ...
- iOS开发UI篇—简单介绍静态单元格的使用
iOS开发UI篇—简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一个tableview来展示的,上面的数据都是固定的,且几乎不会改变. 要完成上面的效果, ...
- iOS开发Swift篇—简单介绍
iOS开发Swift篇—简单介绍 一.简介 Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为“雨燕”,是它的LOGO 是一只燕子,跟Objective-C ...
- 李洪强iOS开发之- 实现简单的弹窗
李洪强iOS开发之- 实现简单的弹窗 实现的效果: 112222222222223333333333333333
- iOS 开发人员不可缺少的75个工具
原文出处: Ben Scheirman 译文出处: Njuxjy 假设你去到一位熟练的木匠的工作室,你总是能发现他/她有一堆工具来完毕不同的任务. 软件开发相同如此. 你能够从软件开发人员怎样使用工具 ...
- 分享iOS开发常用(三方类库,工具,高仿APP,实用网站,技术干货)
一 . JSONModel (三方类库会有更新,建议大家在线下载) http://pan.baidu.com/s/1i5ybP1z 二.AFNetworkiong http://pan.baidu. ...
- iOS开发基础-KVC简单介绍
一.KVC介绍 键值编码(Key Value Coding,KVC):使开发者不必进行任何操作就可以进行属性的动态读写. KVC操作方法由 NSKeyValueCoding 协议提供,而 NSObje ...
随机推荐
- 怎么解决ZBrush保存历史记录太多问题
经常有用户反映说ZBrush ®保存历史记录太多了,导致文件太大了!模型已经是降低级别保存了,在保存历史记录的时候还是很慢很慢,不知道怎么才能减少ZBrush保存的历史步骤的多少.针对这一问题,小编统 ...
- 使用ztree.js,受益一生,十分钟学会使用tree树形结构插件
看到ztree.js,这几个字眼,毋庸置疑,那肯定就是tree树形结构了,曾经的swing年代有jtree,后来jquery年代有jstree和treeview,虽然我没写过,但是我见过,一些小功能做 ...
- NOIP2007矩阵取数[DP|高精度]
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- GIT安装和使用
GIT 首先登陆github账号 在本地创建一个文件夹 点击文件夹,右键,选择Git create repository here 操作之后,会生成一个.git文件(这个文件为隐藏文件) 在此 ...
- 嵌入式Linux驱动学习之路(六)u-boot启动内核
内核启动是需要必要的启动参数.不能开机自动完全从0开始启动,需要uboot帮助内核实现重定位并提供参数. 首先,uboo会从Kernel分区中读取bootcmd环境变量,根据环境变量可自动启动. 分区 ...
- TextView和EditText中的setFilters方法说明
在TextView中有一个方法public void setFilters(InputFilter[] filters),API中有一句说明:Sets the list of input filter ...
- 为什么那么多人想开发一元夺宝类app?
别拿你的无知和愚蠢,来证明主观的判断! 国人对一切事物具有怀疑的本性是好的, 但是若不建立于科学的分析方法, 那就是愚昧! 身边有朋友玩夺宝投入较多,产出较少,于是向我求助.想从数据分析的角度知道到底 ...
- hashmap先按照value从大到小排序,value相等时按照key从小到大排序
hashmap先按照value从大到小排序,value相等时按照key从小到大排序. [2]是从小到大排序,在[2]代码基础上交换o1,o2位置即可. 代码中用到[1]中提到的在value相等时再比较 ...
- HTML 学习笔记 JavaScript (节点)
HTML 节点: HTML DOM定义了所有HTML元素的对象和属性 以及访问它们的方法. HTML DOM是关于如何获取 修改 添加 或 删除HTML元素的标准. 在js中通过document这个对 ...
- DOM与元素节点内联样式
获取.设置及移除单个内联 CSS 属性 每个 HTML 元素都有个 style 属性,可以用来插入针对该元素的内联 CSS 属性. <div style='background-color:bl ...