iOS 换肤工作总结

这段时间自己的工作是给应用程序换肤。具体的流程如下:

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的换肤功能,存在的问题很可能是效率比较低,然后代码有点冗余。不足之处,望指正,已达共同进步的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值