美文网首页
ios实现换肤功能

ios实现换肤功能

作者: 唐桑阿米达 | 来源:发表于2017-10-18 21:51 被阅读0次

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

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



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

    共勉。


    ……

    相关文章

      网友评论

          本文标题:ios实现换肤功能

          本文链接:https://www.haomeiwen.com/subject/uxbiettx.html