最近接到了一个需求,需要实现一键换肤,由于入门尚浅,功力不够深厚,各位大佬勿喷。希望分享出来能让更多的大佬批评指正。话不多说直接上代码。
1.枚举(多种风格)
我枚举类型是NSInteger类型,根据该值,返回相对应的颜色或相关设置。
创建一个NSObject类,不同风格的颜色等相关设置在此类中实现。
typedef NS_ENUM(NSInteger ,skinStyle){
StyleOfOne = 1,
StyleOfTwo,
StyleOfThre,
StyleOfFour,
……………………
}
@interface ChangeColor : NSObject
@property(nonatomic ,assign)skinStyle style;
+(instancetype)sharedDataBase;
/**
右侧视图底色
@param style 根据通知返回的INteger类型
@return 返回该类型的颜色
*/
-(NSColor *)viewColorOfShowScheduleView:(skinStyle)style;
.m文件
+(instancetype)sharedDataBase
{
static ChangeColor *storeValue =nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
storeValue = [[ChangeColor alloc]init];
});
return storeValue;
}
-(NSColor *)viewColorOfShowScheduleView:(skinStyle)style{
NSColor * color ;
//这里根据你枚举的名称来判断你是哪套皮肤,并根据每套皮肤的需求来进行设置,我的项目需求是皮肤1是红色,所以我这里返回的是红色。
if (style == StyleOfOne) {
color = [NSColor clearColor];
}
…………
剩下的就根据小伙伴们自己的需求进行设置吧。
2.通过通知来提醒系统换肤
相关代码我这里用的通知来告诉系统需要进行换肤,首先我们需要创建一个通知。
NSDictionary *dict2 =[[NSDictionary alloc] initWithObjectsAndKeys:self.styleNum,@"styleNumber", nil];
NSNotification *notification =[NSNotification notificationWithName:@"CHANGESKIN" object:nil userInfo:dict2];
[[NSNotificationCenter defaultCenter] postNotification:notification];
self.styleNum 是我创建的一个全局变量,这个代表我枚举的某一个值,比如self.styleNum=5,通过通知可以让系统知道我要用第5套皮肤。这里还需要将最新的self.styleNum 保存到本地,方法如下
[[NSUserDefaults standardUserDefaults]setObject:Style forKey:@"styleSkin"];
[[NSUserDefaults standardUserDefaults]synchronize];
这样我们就将最新的self.styleNum保存到了本地。
3.怎样使用
首先我们要在UI布局的地方取到本地self.styleNum的值,然后再将取到的值传到文章最开始颜色设置的那个类,还要接收换肤的通知。
1、取到self.styleNum值
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString * styleNum = [userDefaults objectForKey:@"styleSkin"];
2、接收通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getChangeStyle:) name:@"CHANGESKIN" object:nil];
注意:这里的styleSkin与CHANGESKIN要与第二步里面的对应。
3.控件颜色设置
self.showScheduleView.layer.backgroundColor = [[ChangeColor sharedDataBase]viewColorOfShowScheduleView:self.styleNum].CGColor
这里就会根据self.styleNum的值返回相关颜色设置。
总结:以上是我换肤功能实现 ,我希望小伙伴多多提提意见。有啥看不明白的地方就私戳我。有意见的需要我改进的地方请戳死我。以后我还会陆续的更新一些常用的东西。
共勉。
……
网友评论