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

<1>美工提供图片的类型一:

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

勾选第二个:

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

  • 头文件的实现                                                                                                          
  • .m文件的实现
    1. #import "SkinTool.h"
    2.  
    3. /** 当前皮肤色系 */
    4. static NSString *_currentSkin;
    5.  
    6. @implementation SkinTool
    7. // 初始化工具类时,给_currentSkin初始值
    8. + (void)initialize
    9. {
    10. [super initialize];
    11. // 偏好设置中没有值,皮肤默认给一个色系
    12. _currentSkin = [[NSUserDefaults standardUserDefaults] objectForKey:@"CurrentSkin"];
    13. if (_currentSkin == nil) {
    14. _currentSkin = @"blue";
    15. }
    16. }
    17.  
    18. + (void)setCurrentSkinColor:(NSString *)skin
    19. {
    20. _currentSkin = skin;
    21. // 将当前的皮肤色系存放到偏好设置中
    22. [[NSUserDefaults standardUserDefaults] setObject:skin forKey:@"CurrentSkin"];
    23. }
    24.  
    25. + (UIImage *)skinToolWithImageName:(NSString *)imageName
    26. {
    27. // 拼接当前皮肤色系图片在mainBundle中的位置
    28. NSString *imagePath = [NSString stringWithFormat:@"skin/%@/%@",_currentSkin,imageName];
    29. UIImage *image = [UIImage imageNamed:imagePath];
    30. return image;
    31. }
    32.  
    33. + (UIColor *)skinToolWithLabelColor
    34. {
    35. // 拼接plist文件在mainBundle中的相对位置
    36. NSString *plistPath = [NSString stringWithFormat:@"skin/%@/bgColor.plist",_currentSkin];
    37. NSString *path = [[NSBundle mainBundle] pathForResource:plistPath ofType:nil];
    38. // 加载plist,获取存放rgb的字典
    39. NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
    40. NSString *rgbString = dict[@"labelBgColor"];
    41. // 分割rgb字符串
    42. NSArray *rgbArr = [rgbString componentsSeparatedByString:@","];
    43. NSInteger red = [rgbArr[] integerValue];
    44. NSInteger green = [rgbArr[] integerValue];
    45. NSInteger blue = [rgbArr[] integerValue];
    46. // 返回颜色
    47. return [UIColor colorWithRed:red / 255.0 green:green / 255.0 blue:blue / 255.0 alpha:1.0];
    48. }
    49. @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. Android View和ViewGroup

    View和ViewGroup Android的UI界面都是由View和ViewGroup及其派生类组合而成的. 其中,View是所有UI组件的基类,而 ViewGroup是容纳这些组件的容器,其本身也 ...

  2. 关于TD-LTE网络MRO分析中的一些疑问

    1.eNB天线到达角(LteScAOA)超出正常值范围 在OMC-R测量报告技术要求中此字段的定义为: "定义了一个用户相对参考方向的估计角度.测量参考方向应为正北,逆时针方向.可以辅助确定 ...

  3. POJ1651Multiplication Puzzle[区间DP]

    Multiplication Puzzle Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8737   Accepted:  ...

  4. KSFramework:集成U3D热重载框架 - README

    KSFramework KEngine + SLua+ Framework = KSFramework KSFramework是一个整合KEngine.SLua的Unity 5开发框架,并为程序.美术 ...

  5. noip模拟赛(一)密码

    密码 (pasuwado.pas/c/cpp) [问题描述] 哪里有压迫,哪里就有反抗. moreD的宠物在法庭的帮助下终于反抗了.作为一只聪明的宠物,他打算把魔法使moreD的魔法书盗去,夺取mor ...

  6. ajax asud模板

    <table class="table"> <tr> <th>@Html.DisplayNameFor(model=>model.Id)& ...

  7. Jenkins 安装

    1. 调整tomcat的jvm配置, 以免内存不够, 在catalina.sh中 #!bin/sh下添加 JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX ...

  8. [转]源代码的管理和发布:以SVN为例

    FROM : http://ju.outofmemory.cn/entry/47277 前几天在微博吐槽了SVN的几个不爽的地方:.svn文件满天飞.分支管理的麻烦.不爽一般来说都是有过对比后才有如此 ...

  9. 转:openwrt中luci学习笔记

    原文地址:openwrt中luci学习笔记 最近在学习OpenWrt,需要在OpenWrt的WEB界面增加内容,本文将讲述修改OpenWrt的过程和其中遇到的问题. 一.WEB界面开发         ...

  10. 华为acl(traffic-filter)和dhcp管理

    华为alc配置实例:-traffic-filter # 在VLAN100上配置基于ACL的报文过滤,允许源IP地址为192.168.0.2/32的报文通过,丢弃其他报文. <HUAWEI> ...