应用主题的更换往往会给我们的应用添彩,今天总结一下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. keil编译出错关于__use_no_semihosting_swi的使用
  2. vue中在data中写入img地址 引入问题
  3. 语言压缩zip win_主流压缩软件挨个尝试后,我选择了没有短板的全能压缩Bandizip...
  4. 心中无敌,则天下无敌
  5. 【LeetCode 剑指offer刷题】动态规划与贪婪法题7:47:礼物的最大价值
  6. c#明华rf读卡器_C#调用第三方API接口-案例明华读卡器
  7. linux播放csf文件
  8. 美女程序员,看到最后一个就亮了
  9. AD637_高精度,宽带RMS-DC转换器
  10. 理解Memory Barrier(内存屏障)
  11. 直通车推广技巧、店铺人群标签怎么做?猜你喜欢入池检测
  12. GraphPad Prism 中文版 科研绘图工具
  13. 5.15 按照排序图标对目标拓展客户数进行排序 [原创Excel教程]
  14. 记录下我磕磕碰碰的三个月找工作经历,完整PDF
  15. C#winform连接数据库实现登陆注册(数据库的安装与配置)
  16. 从零开始制作一个基于SOPC方法的DDS正弦信号发生器
  17. python一些常用函数
  18. SLAM导航机器人零基础实战系列:(四)差分底盘设计——5.底盘PID控制参数整定
  19. Java程序突然死掉的原因
  20. 数学分形之复牛顿迭代法

热门文章

  1. matlab randi 函数,急求MATLAB的randi函数源代码,我的7.1没有,谢谢谢谢
  2. 百度李彦宏:文心一言和 ChatGPT 水平差距不是很大,也就一两个月
  3. CRT的安装步骤。学不会来打我
  4. 聚类算法(无监督算法)
  5. Python序列解包
  6. QQ好友清单整理方法与工具
  7. SAP 银企直连 通过 Http Get 方式下载交易明细文件
  8. 网络版权侵权行为有哪些
  9. 可以把管理系统软件放到云服务器,erp软件可以放在云服务器上吗
  10. oracle 经纬度的数据类型,4.2 SDO_GEOMETRY类型、属性和值