//当前主题的名字
@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 ThemeManagerstatic 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

IOS主题切换ThemeManager相关推荐

  1. ios 主题切换 思路_iOS 实现主题切换的最佳方案

    投资证券的小伙伴儿,应该非常熟悉很多 App 的夜间模式.打开夜间模式时,App 所有的页面由白色变为黑色,这样做有两个好处:一个是可以保护眼睛:另一个是相关的红绿行情图像,也显得更加协调.Andro ...

  2. ios 主题切换 思路_IOS主题切换ThemeManager

    #import "ThemeManager.h" #define kDefaultThemeName   @"默认主题" #define kThemeName  ...

  3. ios 主题切换 思路_一个轻量级的iOS皮肤切换方案(内附Demo)

    项目代码放在https://github.com/SlashDevelopers/SDTheme,这个方案是从实际项目中剥离而来的,大家使用中遇到什么问题或者有什么赐教欢迎随时留言~ Demo运行效果 ...

  4. ios 主题切换 思路_iOS主题皮肤切换

    如果您的企业已启用企业统一身份认证,请在企业内部系统修改密码. 切换企业 点击消息列表界面的"切换企业/组织",方便快速切换企业/组织."切换企业/组织"及企业 ...

  5. ios 主题切换 思路_iOS 使用 NSObject 的分类实现快速切换主题

    PYTheme An easy way to change theme through NSObject's category for iOS. 通过 NSObject 的分类实现使用简单的主题更换. ...

  6. iOS开发夜间模式的设置(主题切换)

    iOS开发夜间模式的设置(主题切换) 很长一段时间没有写博客了.想到自己最近刚好做了不少重构,刚好可以总结一下. 夜间模式,很多阅读类的或资讯类的App都会这个功能.以前自己也做过,现在把它抽出来封装 ...

  7. android os仿ios,安卓机和iOS系统结合?再也不用去下高仿的iOS主题了

    原标题:安卓机和iOS系统结合?再也不用去下高仿的iOS主题了 有没有朋友曾经像我一样,酷爱iOS那简洁,图标辨识度高的主题呢?只是那时候买不起苹果手机(现在也买不起),只能去主题商店里面找一些高仿的 ...

  8. 英语阅读推荐:主题切换控件 ExpressionBuilder

    这里是Cat in dotNET的Random Clippings系列,专门向大家推荐.NET相关的英文技术文章,每期推荐两篇文章,第一篇适合于英语技术文章阅读的入门者练习阅读能力,而第二篇则适合于进 ...

  9. CI框架主题切换的功能

    CI框架主题切换的功能 本人接触到这个框架不就,属于菜鸟 , 公司现在用CI框架做项目 ,老大要做一个主题切换的功能,说明功能的要求我的脑子里瞬间有几个想法. 脑子里最简单的就是设置全局变量 如 : ...

最新文章

  1. 项目管理13禁忌[转]
  2. android新拟态实现方法,Android 新拟态UI (Neumorphism)
  3. rip协议中周期性广播路由信息的报文_技术实操||距离矢量路由协议-RIP
  4. Ubuntu14.04设置开机可以以root用户身份登录
  5. ad如何选中当前层上的器件_82条AD转换设计经验总结!
  6. php新闻添加图片,PHP操纵blob巧将图片存入ORACLE
  7. HTML/CSS/JavaScript学习笔记【持续更新】
  8. linux 计算机概论 Linux介绍
  9. mvvm 模板中事件没有执行的解决方案
  10. 纯CSS实现三列布局(两边固定,中间自适应)
  11. 计算机无法启动打印服务,电脑重启print spooler服务无法启动怎么处理
  12. BS 和CS的区别
  13. 分享你喜欢的杀毒软件
  14. UEFI edk2>edksetup.bat --nt32,build,无法解析的符号解决办法
  15. Jmockit使用笔记_基本功能使用@Tested_@Injectable_@Mocked_Expectations
  16. LeetCode 1665. 完成所有任务的最少初始能量
  17. 2013年最后2个月的学习目标(成果)(上次更新2013年11月18日)
  18. 我的世界java边境之地_我的世界边境之地是否存在 我的世界边境之地大揭秘
  19. 【抖音视频剪辑】台词找影片素材,剪视频必备
  20. 活动预告丨易盾CTO朱浩齐将出席2018 AIIA大会,分享《人工智能在内容安全的应用实践》

热门文章

  1. 2021年12月1日
  2. 射频芯片设计EM仿真(一)
  3. 浅谈计算机网络故障诊断排查与维护论文,浅析计算机网络故障诊断
  4. 信号与系统陈后金matlab,陈后金信号与系统matlab实验7.pdf
  5. 安卓投屏软件_AirPlay经常投屏失败,安卓投屏逐渐超越ios?
  6. 织梦模板dedecms文件名介绍与说明
  7. Taro UI 中使用第三方图标
  8. 编写函数,判断year是否为闰年,若是则返回1,否则返回0
  9. 作为一个Java程序员,一生必看的15本书!赶快收藏起来,适合所有程序员们
  10. 淘宝助理 引用picture存在盗链解决方案