1.抽取的工具类
//
// SkinTool.h
#import <UIKit/UIKit.h>
@interface SkinTool : NSObject
+ (void)setSKinColor:(NSString *)skinColor;
+ (UIImage *)skinToolWithImageName:(NSString *)imageName;
+ (UIColor *)skinToolWithLabelColor;
@end
//
// SkinTool.m
#import "SkinTool.h"
@implementation SkinTool
static NSString *_skinColor;
+ (void)initialize
{
_skinColor = [[NSUserDefaults standardUserDefaults] objectForKey:@"skinColor"];
if (_skinColor == nil) {
_skinColor = @"blue";
}
}
+ (void)setSKinColor:(NSString *)skinColor
{
_skinColor = skinColor;
// 保存用户选中的皮肤颜色
[[NSUserDefaults standardUserDefaults] setObject:skinColor forKey:@"skinColor"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
+ (UIImage *)skinToolWithImageName:(NSString *)imageName
{
NSString *imagePath = [NSString stringWithFormat:@"skin/%@/%@", _skinColor ,imageName];
return [UIImage imageNamed:imagePath];
}
+ (UIColor *)skinToolWithLabelColor
{
// 1.获取plist的路径
NSString *plistName = [NSString stringWithFormat:@"skin/%@/bgColor.plist", _skinColor];
NSString *plistPath = [[NSBundle mainBundle] pathForResource:plistName ofType:nil];
// 2.读取颜色的点击
NSDictionary *colorDict = [NSDictionary dictionaryWithContentsOfFile:plistPath];
// 3.读取对应颜色的字符串
NSString *colorString = colorDict[@"labelBgColor"];
// 4.获取颜色数组
NSArray *colorArray = [colorString componentsSeparatedByString:@","];
// 5.读取对应RGB
NSInteger red = [colorArray[0] integerValue];
NSInteger green = [colorArray[1] integerValue];
NSInteger blue = [colorArray[2] integerValue];
return [UIColor colorWithRed:red/255.0 green:green/255.0 blue:blue/255.0 alpha:1.0];
}
@end
2.控制器使用
//
// ViewController.m
#import "ViewController.h"
#import "SkinTool.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *faceImageView;
@property (weak, nonatomic) IBOutlet UIImageView *heartImageView;
@property (weak, nonatomic) IBOutlet UIImageView *rectImageView;
@end
@implementation ViewController
/*
问题一:默认进来没有皮肤颜色
问题二:没有记录用户选中皮肤颜色
问题三:和美工沟通的问题
问题四:多个控制器的换肤
问题五:换肤的ImageView不要写在viewDidLoad方法
*/
- (void)viewDidLoad {
[super viewDidLoad];
[self changeImages];
}
- (IBAction)changeToOrangeSkin {
[SkinTool setSKinColor:@"orange"];
[self changeImages];
}
- (IBAction)changeToBlueSkin {
[SkinTool setSKinColor:@"blue"];
[self changeImages];
}
- (IBAction)changeToRedSkin {
[SkinTool setSKinColor:@"red"];
[self changeImages];
}
- (IBAction)changeToGreenSkin {
[SkinTool setSKinColor:@"green"];
[self changeImages];
}
- (void)changeImages
{
self.faceImageView.image = [SkinTool skinToolWithImageName:@"face"];
self.heartImageView.image = [SkinTool skinToolWithImageName:@"heart"];
self.rectImageView.image = [SkinTool skinToolWithImageName:@"rect"];
}
@end
//
// TwoViewController.m
#import "TwoViewController.h"
#import "SkinTool.h"
@interface TwoViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *faceImageView;
@property (weak, nonatomic) IBOutlet UIImageView *heartImageView;
@property (weak, nonatomic) IBOutlet UIImageView *rectImageView;
@property (weak, nonatomic) IBOutlet UILabel *testLabel;
@end
@implementation TwoViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
//换肤的ImageView不要写在viewDidLoad方法
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.faceImageView.image = [SkinTool skinToolWithImageName:@"face"];
self.heartImageView.image = [SkinTool skinToolWithImageName:@"heart"];
self.rectImageView.image = [SkinTool skinToolWithImageName:@"rect"];
self.testLabel.backgroundColor = [SkinTool skinToolWithLabelColor];
}
@end
4.注意图片需要创建真实目录存放
5.换颜色
把每个主题的颜色,用plist保存起来
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>labelBgColor</key>
<string>0,0,255</string>
</dict>
</plist>
换肤工具类中处理:
// 1.获取plist的路径
NSString *plistName = [NSString stringWithFormat:@"skin/%@/bgColor.plist", _skinColor];
NSString *plistPath = [[NSBundle mainBundle] pathForResource:plistName ofType:nil];
// 2.读取颜色的点击
NSDictionary *colorDict = [NSDictionary dictionaryWithContentsOfFile:plistPath];
// 3.读取对应颜色的字符串
NSString *colorString = colorDict[@"labelBgColor"];
// 4.获取颜色数组
NSArray *colorArray = [colorString componentsSeparatedByString:@","];
// 5.读取对应RGB
NSInteger red = [colorArray[0] integerValue];
NSInteger green = [colorArray[1] integerValue];
NSInteger blue = [colorArray[2] integerValue];
return [UIColor colorWithRed:red/255.0 green:green/255.0 blue:blue/255.0 alpha:1.0];