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