iOS开发--换肤简单实现以及工具类的抽取

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

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

iOS开发--换肤简单实现以及工具类的抽取

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

iOS开发--换肤简单实现以及工具类的抽取

勾选第二个:

iOS开发--换肤简单实现以及工具类的抽取

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

  • 头文件的实现                                                                                                          iOS开发--换肤简单实现以及工具类的抽取
  • .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                                                               iOS开发--换肤简单实现以及工具类的抽取iOS开发--换肤简单实现以及工具类的抽取iOS开发--换肤简单实现以及工具类的抽取
  • 外界调用工具类的时候,容易出现的错误(项目中出现在TabBar控制器情况下) -- 原因在于TabBar控制器的View是懒加载的,如果将设置皮肤类的代码写在ViewDidLoad中,默认只会执行一次;!!!!!!解决方案:将代码写在ViewWillAppear中      iOS开发--换肤简单实现以及工具类的抽取

出现错误的图解:

iOS开发--换肤简单实现以及工具类的抽取

上一篇:POJ1904 King's Quest(完备匹配可行边:强连通分量)


下一篇:mysql 存储过程事务