一、基本思路
1> 解決方案1,使用顏色作為圖片素材的命名關(guān)鍵字
問題1:要保證每套圖片的文件名 顏色+ 名稱.png的格式比較麻煩
問題2:如果要將某一個(gè)圖片應(yīng)用到其他皮膚不方便
2> 解決方案2腮恩,利用Bundle,將圖片文件保存在不同的Bundle中
問題:平面設(shè)計(jì)師維護(hù)不方便
3> 解決方案3偏窝,利用文件夾(藍(lán)色),將圖片文件保存在不同文件夾中
好處:便于平面設(shè)計(jì)師針對(duì)不同的文件夾維護(hù)圖片素材
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *faceImageView;
@property (weak, nonatomic) IBOutlet UIImageView *heartImageView;
@property (weak, nonatomic) IBOutlet UIImageView *rectImageView;
@end
@implementation ViewController
/*
問題一:默認(rèn)進(jìn)來沒有皮膚顏色
問題二:沒有記錄用戶選中皮膚顏色
問題三:和美工溝通的問題
問題四:多個(gè)控制器的換膚
*/
- (void)viewDidLoad {
[super viewDidLoad];
NSString *skinColor = [[NSUserDefaults standardUserDefaults] objectForKey:@"skinColor"];
if (skinColor == nil) {
skinColor = @"blue";
}
[self changeSkinWithSkinColor:skinColor];
}
- (IBAction)changeToBlueSkin {
[self changeSkinWithSkinColor:@"blue"];
}
- (IBAction)changeToRedSkin {
[self changeSkinWithSkinColor:@"red"];
}
- (IBAction)changeToGreenSkin {
[self changeSkinWithSkinColor:@"green"];
}
- (void)changeSkinWithSkinColor:(NSString *)skinColor
{
NSString *faceImageName = [NSString stringWithFormat:@"skin/%@/face", skinColor];
self.faceImageView.image = [UIImage imageNamed:faceImageName];
NSString *heartImageName = [NSString stringWithFormat:@"skin/%@/heart", skinColor];
self.heartImageView.image = [UIImage imageNamed:heartImageName];
NSString *rectImageName = [NSString stringWithFormat:@"skin/%@/rect", skinColor];
self.rectImageView.image = [UIImage imageNamed:rectImageName];
// 記錄用戶選中的皮膚顏色
[[NSUserDefaults standardUserDefaults] setObject:skinColor forKey:@"skinColor"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
@end
屏幕快照 2017-07-02 下午11.14.43.png
二、換膚工具類
#import <UIKit/UIKit.h>
@interface SkinTool : NSObject
+ (void)setSKinColor:(NSString *)skinColor;
+ (UIImage *)skinToolWithImageName:(NSString *)imageName;
+ (UIColor *)skinToolWithLabelColor;
@end
#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.讀取顏色的點(diǎn)擊
NSDictionary *colorDict = [NSDictionary dictionaryWithContentsOfFile:plistPath];
// 3.讀取對(duì)應(yīng)顏色的字符串
NSString *colorString = colorDict[@"labelBgColor"];
// 4.獲取顏色數(shù)組
NSArray *colorArray = [colorString componentsSeparatedByString:@","];
// 5.讀取對(duì)應(yīng)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
#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
/*
問題一:默認(rèn)進(jìn)來沒有皮膚顏色
問題二:沒有記錄用戶選中皮膚顏色
問題三:和美工溝通的問題
問題四:多個(gè)控制器的換膚
問題五:換膚的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