zoukankan      html  css  js  c++  java
  • iOS开发--换肤简单实现以及工具类的抽取

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

    <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[0] integerValue];
      44     NSInteger green = [rgbArr[1] integerValue];
      45     NSInteger blue = [rgbArr[2] 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中      

    出现错误的图解:

      

  • 相关阅读:
    UVA 11174 Stand in a Line,UVA 1436 Counting heaps —— (组合数的好题)
    UVA 1393 Highways,UVA 12075 Counting Triangles —— (组合数,dp)
    【Same Tree】cpp
    【Recover Binary Search Tree】cpp
    【Binary Tree Zigzag Level Order Traversal】cpp
    【Binary Tree Level Order Traversal II 】cpp
    【Binary Tree Level Order Traversal】cpp
    【Binary Tree Post order Traversal】cpp
    【Binary Tree Inorder Traversal】cpp
    【Binary Tree Preorder Traversal】cpp
  • 原文地址:https://www.cnblogs.com/gchlcc/p/5587570.html
Copyright © 2011-2022 走看看