简单是换肤示例

来源:互联网 发布:制作纪录片的软件 编辑:程序博客网 时间:2024/06/06 14:07

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 SkinToolstatic 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];







0 0