美文网首页iOS点点滴滴iOS Developer
皮肤(主题)更换实现

皮肤(主题)更换实现

作者: 稻_草_人 | 来源:发表于2017-08-01 10:23 被阅读0次

    引:之前一个项目用到过皮肤切换,自己封装了下,封装的不是很好用,现在这个项目又要用到,就想着看看别个大牛的封装想看点这里,借鉴了大牛的一些思路,写了个微型版的,还是很实用。(主要是大牛的源码有些不太看的懂,怕后期不好维护,逃。。。。)

    正文:

    1、实现思路:用一个SkinManger单例类管理皮肤的切换、添加和获取当前皮肤等操作。并发送一个全局的皮肤更换通知。用一个SkinBinderManger单例类和NSOject的类别实现对相应皮肤类的链接,并接收通知,更换皮肤。当前所有的皮肤类都是以一个抽象类BaseSkin为基类进行创建、和SkinManger与SkinBinderManger关联。

    2、用法:

     //程序入口进行皮肤管理器初始化
     NSArray *skinNames = @[@"RedSkin",@"BlueSkin",@"BlankSkin"];
     for (NSString *skinName in skinNames) {
         [[SkinManger sharedInstence] addSkinWithName:skinName];
     }
    
    //对需要改变皮肤的控件绑定皮肤
    //label
    [self.textLabel bindSkinCallBack:^(id sender, BaseSkin *skin) {
         UILabel *label = sender;
         label.textColor = skin.textColor;
    }];
    //imageView
    [self.textImg bindSkinCallBack:^(id sender, BaseSkin *skin) {
          UIImageView *imgView = sender;
          imgView.image = [skin getImgNameWithIdentifier:@"tempImg"];
    }];
    //view
    [self.textView bindSkinCallBack:^(id sender, BaseSkin *skin) {
         UIView *view = sender;
         view.backgroundColor = skin.bgColor;
     }];
    
    //设置当前皮肤
    [[SkinManger sharedInstence] setCurrentSkinWithName:@"BlankSkin"];
    
    //改变当前皮肤
    [[SkinManger sharedInstence] setCurrentSkinWithName:@"BlankSkin"];
    

    3、注意
    (1)、使用getImgNameWithIdentifier:方法时,需要将各种皮肤图片名称进行处理,以图片名称_类名称的形式存放在Xcode 工程文件的Assets.xcassets文件里面(将图片名称进行修改),使用时直接使用修改前的图片名称。
    (2)、第一次设置当前模型时,即调用setCurrentSkinWithName方法时,要保证所有的要改变皮肤的控件皮肤绑定成功。

    4、最后:
    demo

    相关文章

      网友评论

        本文标题:皮肤(主题)更换实现

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