代码很少,使用起来很简单,所以这里没有提供源码。
这是.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:方法中。