ios 程序猿Family常用组件iOS第三方轮子记录

换肤工具类的简单封装

2017-01-06  本文已影响559人  ZhengYaWei

代码很少,使用起来很简单,所以这里没有提供源码。
这是.h文件中的代码,对外提供两个方法,第一个方法可以更改皮肤的主题。第二个方法是设置图片,要想第一个方法生效,在设置需要更换皮肤主题的地方要用这个方法设置图片。第三个方法是设置图片内容的实现,其相关说明见下方(重要)。

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface ZWSkinTool : NSObject


+(void)setSkinColor:(NSString *)skinColor;

+ (UIImage *)skinToolWithImageNamed:(NSString *)imageName;
@end

再看一下.m文件中的代码,这里总共有三个方法,第一个方法是系统方法,只要通过类方法创建对象就会调用该方法,这个方法里面主要做一些初始化操作。第二个方法是更改主题皮肤的实现。

#import "ZWSkinTool.h"
@implementation ZWSkinTool
static NSString * _skinColor;

//类方法的初始化方法  调用类方法的时候会调用这里面的方法
+ (void)initialize{
         _skinColor = [[NSUserDefaults standardUserDefaults]objectForKey:@"skinColor"];
        if (_skinColor == nil) {
              _skinColor = @"red";
        }
}

+(void)setSkinColor:(NSString *)skinColor{
       _skinColor = skinColor;
       //记录皮肤颜色
       [[NSUserDefaults standardUserDefaults]setObject:_skinColor forKey:@"skinColor"];
       [[NSUserDefaults standardUserDefaults]synchronize];
}

+ (UIImage *)skinToolWithImageNamed:(NSString *)imageName{
          NSString *imageNamePath = [NSString stringWithFormat:@"skin/%@/%@",_skinColor,imageName];
         UIImage *image = [UIImage imageNamed:imageNamePath];
        return image;
};
@end

第三个方法是设置图片内容的实现,其中要注意这行代码 NSString *imageNamePath = [NSString stringWithFormat:@"skin/%@/%@",_skinColor,imageName]; skin的资源文件,第一个%@是主题名,第二个%@是图片名。这里务必要说明一点,之所以是这样做,而不是直接设置一张图片名,是因为添加资源文件到工程中的方式和一般有所不同。添加资源方式见下图:


添加图片素材的方式

这是添加资源的时候要注意,选中Create folde references 这样才可以在app包中创建对应的文件夹,否则只是选中Create groups,不会在app包中创建文件夹,且名字相同的素材只能保留一份,其他的将会被覆盖。这是一个小技巧,这个小技巧一般会应用于游戏开发中的场景切换以及常规app的换肤相关问题。当然解决这个问题也可以通过创建.bundle资源包来解决,但是相比较这个方法会显得稍微麻烦一些。一般之所以这样做,是考虑到美工给的素材命名和结构问题,一般的素材结构会是这样:图片可能是以每一套皮肤命名相同,但是处在不同的文件夹。
还有一个额外的说明: skinToolWithImageNamed: 这个方法最好写在viewWillAppear:方法中。

上一篇下一篇

猜你喜欢

热点阅读