一.根据美工提供的图片,可以有两种换肤的方案.

<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开发--换肤简单实现以及工具类的抽取的更多相关文章

  1. iOS开发一个制作Live Photo的工具

    代码地址如下:http://www.demodashi.com/demo/13339.html 1.livePhoto简介 livePhoto是iOS 9.0 之后系统相机提供的拍摄动态照片的功能,但 ...

  2. iOS开发网络篇—简单介绍ASI框架的使用

    iOS开发网络篇—简单介绍ASI框架的使用 说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大 ...

  3. iOS开发UI篇—简单的浏览器查看程序

    iOS开发UI篇—简单的浏览器查看程序 一.程序实现要求 1.要求 2. 界面分析 (1) 需要读取或修改属性的控件需要设置属性 序号标签 图片 图片描述 左边按钮 右边按钮 (2) 需要监听响应事件 ...

  4. iOS开发UI篇—简单介绍静态单元格的使用

    iOS开发UI篇—简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一个tableview来展示的,上面的数据都是固定的,且几乎不会改变. 要完成上面的效果, ...

  5. iOS开发Swift篇—简单介绍

    iOS开发Swift篇—简单介绍 一.简介 Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为“雨燕”,是它的LOGO 是一只燕子,跟Objective-C ...

  6. 李洪强iOS开发之- 实现简单的弹窗

     李洪强iOS开发之- 实现简单的弹窗 实现的效果:  112222222222223333333333333333

  7. iOS 开发人员不可缺少的75个工具

    原文出处: Ben Scheirman 译文出处: Njuxjy 假设你去到一位熟练的木匠的工作室,你总是能发现他/她有一堆工具来完毕不同的任务. 软件开发相同如此. 你能够从软件开发人员怎样使用工具 ...

  8. 分享iOS开发常用(三方类库,工具,高仿APP,实用网站,技术干货)

    一 . JSONModel  (三方类库会有更新,建议大家在线下载) http://pan.baidu.com/s/1i5ybP1z 二.AFNetworkiong http://pan.baidu. ...

  9. iOS开发基础-KVC简单介绍

    一.KVC介绍 键值编码(Key Value Coding,KVC):使开发者不必进行任何操作就可以进行属性的动态读写. KVC操作方法由 NSKeyValueCoding 协议提供,而 NSObje ...

随机推荐

  1. 网管把握市场需求,其实一点都不可怜 转载于 [http://tonyxiaohome.blog.51cto.com/925273/955589]

    呵呵,这是我到51CTO做实习斑竹,回复的第一篇帖子,原帖在这里: http://bbs.51cto.com/thread-940532-1.html 这位朋友可能最近受到点挫折,所以有点小灰心,我呢 ...

  2. 第二届中国移动互联网测试大会PPT

    第二届中国移动互联网测试大会PPT下载_360云盘 (提取密码:7799) 第二届中国移动互联网测试大会PPT下载_百度云盘 (提取密码: ws8m) 第二届中国移动互联网测试大会PPT下载_Goog ...

  3. codeforces 732

    A. Buy a Shovel time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  4. 第65课 C++中的异常处理(下)

    1. C++中的异常处理 (1)catch语句块可以抛出异常 ①catch中获捕的异常可以被重新抛出 ②抛出的异常需要外层的try-catch块来捕获 ③catch(…)块中抛异常的方法是throw; ...

  5. 向tiny6410移植tslib(tslib-1.4)

    环境:RedHat 已安装交叉编译器 tslib版本:1.4 首先在redhat文件系统的/usr/local/tslib 创建目录 拷贝源代码tslib-1.4.tar.gz到/usr/local/ ...

  6. 技术专题-PHP代码审计

    作者:坏蛋链接:https://zhuanlan.zhihu.com/p/24472674来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 一.前言 php代码审计如字面 ...

  7. Permutation test 置换检验

    来源:Public Library of Bioinformatics 显著性检验通常可以告诉我们一个观测值是否是有效的,例如检测两组样本均值差异的假设检验可以告诉我们这两组样本的均值是否相等(或者那 ...

  8. FSL - DualRegression

    Source:http://fsl.fmrib.ox.ac.uk/fsl/fslwiki/DualRegression Research Overview A common need for anal ...

  9. JAVA格物致知基础篇:用JAX-RS和Jersey打造RESTful Service

    随着服务器的处理能力越来越强,业务需求量的不断累积,越来越多的公司开始从单一服务器,单一业务承载变成了多服务器,多业务承载的快速扩展的过程中.传统的方法很难满足和应付这种业务量的增长和部署方式的改变. ...

  10. PageRank算法简介及Map-Reduce实现

    PageRank对网页排名的算法,曾是Google发家致富的法宝.以前虽然有实验过,但理解还是不透彻,这几天又看了一下,这里总结一下PageRank算法的基本原理. 一.什么是pagerank Pag ...