ios换肤基本实现

首先,换肤的思路大概都是一样的。几种方法的比较。

1.传值:一个工程中不知道有多少个页面。那么传值有些不太现实。

2.通知:这个还可以。那么,有些页面还没有被创建出来,这时改变样式呢?

3.数据持久化:

 

换肤工具类

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

 

控制器中

- (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"];
}

或者

@implementation TwoViewController

- (void)viewDidLoad {
    [super 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

 

posted @ 2016-03-19 10:11  人生路1/5  阅读(441)  评论(0编辑  收藏  举报