Skip to content

lixiangshadow/VOThemeManager

 
 

Repository files navigation

VOThemeManager(主题管理器)

License Apache  CocoaPods  CocoaPods  Support  Build Status

安装

  • CocoaPods导入(目前使用SDWebImage加载图片,会自动导入SDWebImage):
pod 'VOThemeManager'
  • 手动导入:
    • VOThemeManager文件夹内所有源码拽入项目
    • 导入SDWebImage

数据说明

themes 存放所有主题数据,key表示主题名,value为对应主题数据.
主题数据也是NSDictionary类型, key的格式为 主键|标签|主题键,value为相应的值
示例如下:

{
    test = {
        "nav|0|image" = "tmp_nav_bg";
        "sample|0|color" = "#FFF000";
        "sample|0|image" = "tmp_nav_bg";
    };
 }

主题数据可以用自定义的方式存储,提供了相应的代理方法,但暂未进行调试.

themeAppliers 应用主题数据的方法, themeGetters 获取对象的某个主题属性, themeObjs 当前要应用主题的对象
它们都是 NSMutableDictionary 对象.
themeAppliers和themeGetters的key都是 类名(单列对象内存地址)|标签|主题键, value为block对象.
themeObjs的key是 主键|标签|主题键, value为某个对象,通常为某种视图对象

注:
主 键 --> 自定义的键,用于表示某个主题对象.
标 签 --> 比较灵活,可以是UIControlState,比如UIButton的各种状态. 也可以是某个View的tag,用于区分相同类型的不同对象.也可以是一些自定义的状态
主题键 --> 预定义了四种,color, backgroundColor, image, backgroundImage (对应VOThemeColorKey, VOThemeBackgroundColorKey, VOThemeImageKey, VOThemeBackgroundImageKey).当然也可以自定义主题键.
真实键 --> 由 主键(类名 或 单列对象内存地址))|标签|主题键 组合起来构成

使用

1.唤醒APP时,将主题数据转换为本管理器支持的格式. 例如:

[[VOThemeManager sharedManager] setTheme:array withName:key themeConverter:^NSDictionary *(NSArray *themeArray) {
    __block NSMutableDictionary *itemDic = @{}.mutableCopy;
    [themeArray enumerateObjectsUsingBlock:^(WXSkinItem *skinItem, NSUInteger idx, BOOL *stop) {
        if (skinItem.skinCode.length > 0) {
            if (skinItem.skinFontStyle.length > 0) {
                NSString *realKey = nil;
                BOOL flag = [VOThemeUtils convertPrimaryKey:skinItem.skinCode tag:0 themeKey:VOThemeColorKey toRealKey:&realKey];
                if (flag) {
                    itemDic[realKey] = skinItem.skinFontStyle;
                }
            }
            if (skinItem.skinPic.length > 0) {
                NSString *realKey = nil;
                BOOL flag = [VOThemeUtils convertPrimaryKey:skinItem.skinCode tag:0 themeKey:VOThemeImageKey toRealKey:&realKey];
                if (flag) {
                    itemDic[realKey] = skinItem.skinPic;
                }
            }
        }
    }];
    return itemDic;
}];

通常在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中调用

2.加载完主题数据后,应用指定的主题. 例如:

[[VOThemeManager sharedManager] applyThemeWithName:@"test"];

通常在- (void)applicationDidBecomeActive:(UIApplication *)application中调用

3.添加要使用的主题对象. 例如:

[[VOThemeManager sharedManager] setThemeObject:self.testButton primaryKey:@"btn1" tag:UIControlStateNormal themeKey:VOThemeColorKey];

4.设置应用主题的方式.
在 VOThemeManager+Preset.m 中已经有一部分预置方案.若需要自定义,请参考此文件中的方法.

Packages

No packages published

Languages

  • Objective-C 91.9%
  • Ruby 8.1%