ios实现换肤功能

       最近接到了一个需求,需要实现一键换肤,由于入门尚浅,功力不够深厚,各位大佬勿喷。希望分享出来能让更多的大佬批评指正。话不多说直接上代码。

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保存到了本地。


ios实现换肤功能_第1张图片
相关代码

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的值返回相关颜色设置。




总结:以上是我换肤功能实现 ,我希望小伙伴多多提提意见。有啥看不明白的地方就私戳我。有意见的需要我改进的地方请戳死我。以后我还会陆续的更新一些常用的东西。

共勉。


……

你可能感兴趣的:(ios实现换肤功能)