iOS-本地换肤思路
来源:互联网 发布:php 面相过程 编辑:程序博客网 时间:2024/06/05 01:36
第一次写博客,想着写博客可以记录自己的所学所长,也能系统的整理一下自己的思路,以后会一直坚持下去。
一. 为什么要做换肤效果?
人都是视觉动物,再好的东西看久了也是会腻的,但是我们又不能因为这个而经常发布新版本,所以我们就想着是不是可以定时的切换app的皮肤,或者时用户自己手动切换皮肤呢?
二. 换肤可以做什么样的效果?
这也是我一直在思考的,我觉得,切换皮肤,不仅仅是要包含app的主题颜色,导航栏的颜色,菜单栏的颜色,肯定还是要包含那些跟主题颜色同色调的图片的,当然你还可以考虑是不是还可以切换其它的显示模式,比如可以把商品的显示由tableview显示,切换为collectionview显示。或者一些其它的什么。
三. 怎么做?
这里我写了一下自己的换肤思路,仅供参考。
我将需要切换的主题颜色,和需要切换的主题色调图片,全部整理出来,放到一个bundle里,同时加了其它的几个不同色调的bundle。
bundle中包括图片和一个plist文件,plist文件里我存放主题颜色的RGB颜色值,图片的命名方式全部一致。
怎样生成bundle包?其实非常简单,只要把文件夹的名字加上.bundle的后缀,文件包就自动生成了。
这样文件包已经形成,后面我们只要能从bundle包中针对的取出我们想要的数据和如何切换文件包就可以了。
1. 如何切换文件包呢,只要点击切换想要的肤色按钮,在响应事件中将配置文件包的缓存下来,等到取数据的时候可以直接针对的取出想要的数据。
这里用的最简单的沙盒缓存
- (IBAction)defaultThemeButtonAction:(id)sender {
NSUserDefaults *userDefaults = [NSUserDefaultsstandardUserDefaults];
[userDefaults setObject:@"Red"forKey:@"Theme"];
[userDefaults synchronize];
[self.navigationControllerpopViewControllerAnimated:YES];
}
2. 从配置文件包中取出主题颜色
+ (UIColor *)themeColor{
NSUserDefaults *userDefaults = [NSUserDefaultsstandardUserDefaults];
NSString *theme = [userDefaultsobjectForKey:@"Theme"];
NSString *bundlePath = [[NSBundlemainBundle].resourcePathstringByAppendingPathComponent:[NSStringstringWithFormat:@"%@.bundle",theme]];
NSBundle *themeBundle = [NSBundlebundleWithPath:bundlePath];
NSString *plistPath = [themeBundlepathForResource:@"Theme"ofType:@"plist"];
NSMutableDictionary *plistDict = [[NSMutableDictionaryalloc]initWithContentsOfFile:plistPath];
UIColor *themeColor =RGB(230,82,82);
if (plistPath) {
NSString *redStr = [plistDictobjectForKey:@"red"];
NSString *greenStr = [plistDictobjectForKey:@"green"];
NSString *blueStr = [plistDictobjectForKey:@"blue"];
themeColor = [UIColorcolorWithRed:[redStrfloatValue] green:[greenStrfloatValue]blue:[blueStrfloatValue]alpha:1.0];
}
return themeColor;
}
3. 针对的取出相应的图片
+ (UIImage *)imageWithImageName:(NSString *)imageName
{
NSUserDefaults *userDefaults = [NSUserDefaultsstandardUserDefaults];
NSString *theme = [userDefaultsobjectForKey:@"Theme"];
NSString *bundlePath = [[NSBundlemainBundle].resourcePathstringByAppendingPathComponent:[NSStringstringWithFormat:@"%@.bundle",theme]];
NSBundle *themeBundle = [NSBundlebundleWithPath:bundlePath];
NSString *imagePath = [themeBundlepathForResource:imageNameofType:@"png"];
return [UIImageimageWithContentsOfFile:imagePath];
}
NSUserDefaults *userDefaults = [NSUserDefaultsstandardUserDefaults];
[userDefaults setObject:@"Blue"forKey:@"Theme"];
[userDefaults synchronize];
BaseTabbarController *baseTabbar = [[BaseTabbarControlleralloc]init];
self.view.window.rootViewController = baseTabbar;
到此!大功告成!
如果大家有更好的意见或建议,可以联系我!
代码下载:
- iOS-本地换肤思路
- Android换肤的两种思路
- 实现换肤功能的思路
- Android换肤的两种思路
- iOS 换肤工作总结
- wpf本地程序换肤(换语言)笔记
- 换一种思路解决问题
- ios-换肤简单实现
- Android高阶之换肤实现技术思路
- 网页换肤(简洁写法[提供思路])
- iOS夜间模式,换肤,换字体样式
- 换一个思路(zz)
- android换皮肤思路总结
- android换皮肤思路总结
- 换个思路想问题
- [Swift 开发] iOS换肤框架 SwiftTheme
- iOS-夜间模式(换肤设置)
- iOS-夜间模式(换肤设置)
- Android百度定位API使用方法
- 一个绚丽的loading动效分析与实现!
- POST提交方式中文乱码的解决方案
- Fresco 源码解析 - 利用 @DoNotSkip 来防止混淆
- Java -- JavaBean,POJO,VO,DTO的区别和联系
- iOS-本地换肤思路
- linux基础目录结构
- 生成带有rgb值的pcd文件并显示
- 文章标题
- Android开发 如何快速实现分享功能
- Oracle V$SESSION详解
- Android开发技术学习之popupwindow的弹窗实现
- 实用知识:音乐播放的方法使用
- 虚拟机性能监控与故障处理工具