- 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 中已经有一部分预置方案.若需要自定义,请参考此文件中的方法.