应用主题的更换往往会给我们的应用添彩,今天总结一下iOS主题切换的方法

1.首先把各个主题图片导入到工程目录中


选择Create folder references

2.Thememanager.h中声明单例方法和传入图片或者颜色的名字对应找到图片和颜色

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface Thememanager : NSObject@property(nonatomic, copy) NSString *currentTheme;@property(nonatomic, retain, readonly) NSDictionary *themeDic;@property(nonatomic, retain, readonly) NSDictionary *themeColorDic;+(instancetype)defaultManager;//凭借图片路径并且放回图片对象
-(UIImage *)imageFromName:(NSString *)imgName;//传入颜色对应的pilst文件中名字 获取uicolor颜色
-(UIColor *)colorFromName:(NSString *)colorName;@end

3.创建主题管理类来管理主题的切换,Thememanager.m中要创建单例方法

//获取单例对象
+(instancetype)defaultManager
{static Thememanager *themeManager = nil;static dispatch_once_t predicate;dispatch_once(&predicate, ^{themeManager = [[Thememanager alloc] init];});return themeManager;
}

4.复写init初始化方法获取plist文件中数据对应切换主题

//复写init初始化方法
-(instancetype)init
{self = [super init];if (self) {//1.获取文件路径NSString *path = [[NSBundle mainBundle] pathForResource:@"theme" ofType:@"plist"];//2.解析plist数据NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:path];//设置主题数据_themeDic = dic;//设置初始的主题_currentTheme = @"猫爷";}return self;
}

5.实现根据名字找到图片的方法(地址拼接)

//凭借图片路径并且放回图片对象
-(UIImage *)imageFromName:(NSString *)imgName
{//获取当前工作目录NSString *bundlePath = [[NSBundle mainBundle] bundlePath];NSString *imgpath = [self.themeDic objectForKey:self.currentTheme];NSString *path = [NSString stringWithFormat:@"%@/%@/%@",bundlePath,imgpath,imgName];
//    NSLog(@"path is:%@",path);return [[UIImage alloc] initWithContentsOfFile:path];}

6.复写currenttheme的set方法,当主题切换时发送通知

//复写currenttheme的set方法
-(void)setCurrentTheme:(NSString *)currentTheme
{_currentTheme = currentTheme;//主题切换时获取新的 颜色的config。plist文件数据//获取到当前主题对应的路径NSString *themePath = [self.themeDic objectForKey:_currentTheme];//凭借configpist文件路径NSString *configPath = [NSString stringWithFormat:@"%@/%@/config.plist",[[NSBundle mainBundle] bundlePath],themePath];//根据路径解析plist文件数据_themeColorDic = [NSDictionary dictionaryWithContentsOfFile:configPath];//当主题切换时发起通知[[NSNotificationCenter defaultCenter] postNotificationName:kThemeChanageNotification object:nil];
}

7.在切换主题的类中通过单例拿到图片切换主题

-(instancetype)initWithImage:(UIImage *)image
{self = [super initWithImage:image];if (self) {[[NSNotificationCenter defaultCenter] addObserverForName:kThemeChanageNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {//重新设置图片
//            self.image = [[Thememanager defaultManager] imageFromName:self.imgName];self.image = kThemeImageFromName(self.imgName);}];}return self;
}

转自我的博客http://rockeen.cn/

给你的iOS应用更换主题相关推荐

  1. 主题图标_iPhone一键更换主题、图标神器

    iOS图标虽然是经典,但是看久了也是会腻的.今天教大家一个简单的方法,来更换iPhone的图标. 更换主题.图标教程 前往App Store搜索[moloko]进行下载安装,这是一款可以替iPhone ...

  2. 使用 css/less 动态更换主题色(换肤功能)

    前言 说起换肤功能,前端应该是非常熟悉了? 一般来说换肤的需求分为几种: 1. 纯前端,直接在页面前端通过点击自由切换限定的几种主题色,切换之后主题色变量存到本地浏览器 2. 在后台配置好色值,传到前 ...

  3. Extjs 更换主题(转载)

    转自http://www.wenhaozhong.com/27.html 这里基于 Extjs4.2(发文时官方刚发布了最新版5.0) 进行开发的,更换主题后,主题信息保存在本地 cookie 中,如 ...

  4. linux mint 图标主题_如何在 Linux Mint 中更换主题

    一直以来,使用 Cinnamon 桌面环境的 Linux Mint 都是一种卓越的体验.这也是为何我喜爱 Linux Mint的主要原因之一. -- It's Foss(作者) 一直以来,使用 Cin ...

  5. linux mint 主题切换,详解如何在 Linux Mint 中更换主题

    一直以来,使用 Cinnamon 桌面环境的 Linux Mint 都是一种卓越的体验.这也是为何我喜爱 Linux Mint的主要原因之一. 自从 Mint 的开发团队开始更为严肃的对待设计, &q ...

  6. android最简单的更换主题,教你更换Android手机主题

    买了Android手机的朋友肯定都希望手机桌面拥有一个好看的手机主题,但是具体操作却不会,下面就给大家简单教程. 目前在android系统上常见的主题软件有:open home.ADW launche ...

  7. element-plus 更换主题色

    element-plus 更换主题色 场景: 简单的定制主题色,并不需要有按钮切换主题色. 实现: 在项目中新建你的theme.scss,代码如下: // style/element/index.sc ...

  8. 给hexo搭建的博客更换主题

    怎么给hexo搭建的博客更换主题 首先要进入hexo的官网主题界面,找到你所想要的主题 网址:https://hexo.io/themes/ 点进该主题,就会进入你选中的主题的拥有者的博客,你就可以看 ...

  9. hexo+gitHub 个人博客搭建及更换主题历程(特适合入门小白)

    内容涵盖 hexo+gitHub 个人博客搭建 搭建过程中遇到的问题及解决方案 更换主题 1. gitHub 创建博客仓库 (1) 注册Github(如果已注册可以忽略次此步骤) 详细注册步骤请参考: ...

最新文章

  1. Matplotlib实例教程(七)密度图
  2. 使用 NuGet 管理我们的程序集 - 预发行版
  3. VTK修炼之道11:基本数据结构_数据对象数据集
  4. 用DataTable.Merge()解决了一个排序问题
  5. 【HDU - 3974】 Assign the task (dfs序 + 线段树维护 区间更新+ 单点查询)
  6. 力扣977,有序数组的平方(JavaScript)
  7. 变量的三重属性_TypeScript基础入门 - 变量声明(三)
  8. 直接使用editbox.clear()清空时,有时会无法清除完全,此时有清空文本框的另一种方法...
  9. php中如果想要打印出来的结果换行怎么操作_现在,就要对文件的批操作,动刀子啦!!!...
  10. E20180418-hm
  11. selenium自动化看网课
  12. 瞬变抑制二极管(TVS),如何选型?
  13. 关于网站版权声明(Copyright)的格式和写法
  14. c语言元音字母辅音字母,英语字母中的5个元音字母和21个辅音字母
  15. iexplore.exe - Application Error The instruction at 0x7c0c5a6c references at memory at 0x7c0c5a6c
  16. width:100%和width:auto的区别
  17. OpenStack之Live-migration
  18. 神经网络模型如何应用到实际 - 神经网络模型数学建模案例
  19. 氩弧焊机的电气图_瑞凌TIG200A氩弧焊完整图(MOS管)分析
  20. 不能撑开盒子css,CSS padding在什么情况下不撑开盒子

热门文章

  1. Inno Setup 系列之较完整的Inno Setup 安装脚本,具备安装包常用的功能
  2. 微软认证计算机考试中心,2017年微软OFFICE国际认证考试简介
  3. 英伟达发布Game Ready新驱动,支持多款新游戏
  4. 在Windows上双击运行Python程序不会自动退出的方法
  5. 网络爬虫技术的设计与实现
  6. 《机器视觉与算法》学习笔记(一)——图像的采集
  7. 计算机和自动机,计算机有关自动机的论文
  8. 腾讯领投,小鱼易连完成C轮融资
  9. elasticsearch实战三部曲之二:文档操作
  10. sql 实现按月份,季度统计报表