//当前主题的名字
@property (nonatomic, copy) NSString *themeName;
//主题图片字典, 主题名字对应的文件路径
@property (nonatomic, copy) NSDictionary *themeDic;
//主题颜色字典
@property(nonatomic, copy) NSDictionary *fontColorDic;
+(ThemeManager *)shareInstance;
//根据业务逻辑分析,切换主题只需要切换主题图片和主题颜色,所以提供下面2个方法
-(UIImage *)loadThemeImage:(NSString *)imgName;
-(UIColor *)loadColorWithKeyName:(NSString *)themeKeyName;
-(void)saveTheme;
#import "ThemeManager.h"
#define kDefaultThemeName @"默认主题"
#define kThemeName @"kThemeName"
@implementation ThemeManager
static ThemeManager *instance = nil;
+(ThemeManager *)shareInstance
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[ThemeManager alloc] init];
});
return instance;
}
- (id)init
{
self = [super init];
if (self) {
NSString *themePath = [[NSBundle mainBundle] pathForResource:@"theme" ofType:@"plist"];
_themeDic = [[NSDictionary dictionaryWithContentsOfFile:themePath] copy];
//从 NSUserDefaults 读取主题
NSString *theme = [[NSUserDefaults standardUserDefaults] objectForKey:kThemeName];
if (theme) {
self.themeName = theme;
}else{
self.themeName = kDefaultThemeName;
}
}
return self;
}
- (void)dealloc
{
[_themeName release];
[_themeDic release];
[_fontColorDic release];
[super dealloc];
}
-(NSString *)themePath
{
//1.获取程序包的路径
NSString *rootPath = [[NSBundle mainBundle] resourcePath];
//2.获取当前主题对应的路径
NSString *themePath = [self.themeDic objectForKey:_themeName];
return [rootPath stringByAppendingPathComponent:themePath];
}
//切换主题
-(void)setThemeName:(NSString *)themeName
{
if (_themeName != themeName) {
[_themeName release];
_themeName = [themeName copy];
//读取主题颜色配置文件
NSString *fontFilePath = [[self themePath] stringByAppendingPathComponent:@"config.plist"];
self.fontColorDic = [NSDictionary dictionaryWithContentsOfFile:fontFilePath];
}
}
-(UIImage *)loadThemeImage:(NSString *)imgName
{
if (!imgName) {
return nil;
}
NSString *imgPath = [[self themePath] stringByAppendingPathComponent:imgName];
return [UIImage imageWithContentsOfFile:imgPath];
}
-(UIColor *)loadColorWithKeyName:(NSString *)themeKeyName
{
if (!themeKeyName) {
return nil;
}
NSDictionary *rgbDic = [_fontColorDic objectForKey:themeKeyName];
float r = [[rgbDic objectForKey:@"R"] floatValue];
float g = [[rgbDic objectForKey:@"G"] floatValue];
float b = [[rgbDic objectForKey:@"B"] floatValue];
return [UIColor colorWithRed:r/255 green:g/255 blue:b/255 alpha:1];
}
//保存主题
-(void)saveTheme
{
[[NSUserDefaults standardUserDefaults] setObject:_themeName forKey:kThemeName];
[[NSUserDefaults standardUserDefaults] synchronize];
}
@end