这段时间自己的工作是给应用程序换肤。具体的流程如下:
1、根据登录的账号进行判断。如果登录的是申通的账号。要给整个应用程序的皮肤设置为橘黄色。
2、如果登录的是非申通的账号,则给整个应用程序设置为绿色。
针对上面的问题,自己的处理办法是这样的。
1、在AppDelegate中设置了一个全局变量
/**
* 公司
*/
@property(nonatomic,strong)NSString *brand;
2、然后在
application:(
UIApplication
*)application didFinishLaunchingWithOptions:(
NSDictionary
*)launchOptions给brand赋初值
//判断是否是申通 并进行全局的赋值
NSString *company = [[NSUserDefaults standardUserDefaults] objectForKey:@"brand"];
if ([company isEqualToString:@"sto"]) {
self.brand = company;
}
3、创建一个工具类,用于加载相应地图片
//
// CZQSkinTool.m
// KuaiDiYuan_S
//
// Created by KuaidiHelp on 15/3/27.
// Copyright (c) 2015年 KuaidiHelp. All rights reserved.
//
#import "CZQSkinTool.h"
#import "AppDelegate.h"
@implementation CZQSkinTool
static NSString *_skin;
+ (void)initialize{
//加载沙盒中的皮肤
_skin = [[NSUserDefaults standardUserDefaults] objectForKey:@"skin"];
if (_skin == nil) {
[[NSNotificationCenter defaultCenter] addObserverForName:@"loginSuccess" object: nil queue:nil usingBlock:^(NSNotification *note) {
if([ note.object isEqualToString:@"sto"]){
_skin = @"Orange";
NSLog(@"橘黄色");
}else{
_skin = @"Other";
NSLog(@"绿色");
}
}];
//------------------------------------------------------------------------------
AppDelegate *myDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if([myDelegate.brand isEqualToString:@"sto"]){
_skin = @"Orange";
NSLog(@"橘黄色");
}else{
_skin = @"Other";
NSLog(@"绿色");
}
}
//------------------------------------------------------------------------------
}
+ (UIImage *)imageNamed:(NSString *)name{
NSString *image = [NSString stringWithFormat:@"Skins/%@/%@",_skin,name];
return [UIImage imageNamed:image];
}
@end
4、然后根据这个brand的值 进行相应的换肤
//---------------换肤---------------------
//获取全局变量
AppDelegate *myDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
//进行判断 如果是申通进行换色
if ([myDelegate.brand isEqualToString:@"sto"]) {
NSLog(@"-------申通------");
}else
{
NSLog(@"-------不是申通------");
}
//---------------换肤---------------------
5、以上步骤,只能用于会再次加载的那些图片。对于已经初始化的,得用通知进行相应地换肤。
NSString *brandChen =[body objectForKey:@"brand" Default:@""];
//登录成功通知大家该干活了
[[NSNotificationCenter defaultCenter] postNotificationName:@"loginSuccess" object:brandChen];
6、在接收到通知后
[[NSNotificationCenter defaultCenter] addObserverForName:@"loginSuccess" object: nil queue:nil usingBlock:^(NSNotification *note) {
self.brand = note.object;
}];
7、并同时给tabBarController的tabBarItem进行相应地换图片
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(skinForChen:) name:@"loginSuccess" object:nil];
8、skinForChen的相应方法
#if TEST_BUSS
//----------------------------业务---------------------------
[self setTabBarItem:self.bussinessVC.tabBarItem NorImage:@"findexpress_tab_21.png" andSelImg:@"findexpress_tab_11.png" notification:no];
#endif
#if TEST_CAPITAL
[self setTabBarItem:self.bussinessVCOther.tabBarItem NorImage:@"findexpress_tab_21.png" andSelImg:@"findexpress_tab_11.png" notification:no];
#endif
//----------------------------快递圈---------------------------
[self setTabBarItem:self.ecCon.tabBarItem NorImage:@"findbranch_tab_2.png" andSelImg:@"findbranch_tab_1.png" notification:no];
//----------------------------更多---------------------------
[self setTabBarItem:self.moreVC.tabBarItem NorImage:@"more_tab_2.png" andSelImg:@"more_tab_1.png" notification:no];
通过以上的步骤,自己相应的完成了App的换肤功能,存在的问题很可能是效率比较低,然后代码有点冗余。不足之处,望指正,已达共同进步的目的。