主框架组件化--披露API

我们虽然已经将主骨架拆分了,但是毕竟我们TZSoundMain主骨架里面到底有什么方法,具体方法做什么事情,外界并不知道,如果不把主骨架里面所有的文件看一遍是不可能做到的,这样对其他使用我们私有库的人来说相当不方便,所以我们应该做一个中间层来统一披露我们的API,让外界来使用,而且我们没有在中间层披露的API,其实是不允许外界使用的,但是好处就是一目了然,其他人通过中间层很快就知道怎么去使用我们的私有库。

  • 我们在这里画一张图来说明这个问题


这张图很好说明了这个问题,我们将私有库里面的内容通过中间层披露出公共的API,在此基础上外界使用的时候只需要调用中间层的API就可以直接和我们的私有库的内容进行交互,而不需要再苦苦的追寻所需要的内容,一目了然。

现在我们以我们的主骨架为例,将TZSoundMain里面的内容增加一个中间层用来披露我们提供给外界的API。

  • 创建一个类MainModuleAPI


/**
 获取根控制器
 
 @return  rootTabBarcontroller
 */
+ (UITabBarController *) rootTabBarController;

/**
 添加子控制器

 @param viewController 子控制器
 @param normalImageName 普通状态下地图片
 @param selectedImageName 选中状态下地图片
 @param isRequired 是否需要包装导航控制器
 */
+ (void) addChildViewController: (UIViewController *) viewController normalImageName: (NSString *) normalImageName selectedImageName: (NSString *)selectedImageName isRequiredNavgationController: (BOOL) isRequired;

/**
 设置tabbar中间控件的点击代码块

 @param middleClickBlock 点击代码块
 */
+ (void) setTabbarMiddleButtonClick:(void(^)(BOOL isPlaying))middleClickBlock;

/**
 设置全局导航栏标题背景图片

 @param globalImage 全局导航栏背景图片
 */
+ (void) setNavigationBarGlobalBackGroundImage: (UIImage *) globalImage;

/**
 设置全局导航栏标题颜色, 和文字大小

 @param globalTextColor 全局导航栏标题颜色
 @param fontSize 全局导航栏文字大小
 */
+ (void) setNavigationBarGlobalTextColor: (UIColor *)globalTextColor andFontSize: (CGFloat) fontSize;

+ (UITabBarController *)rootTabBarController
{
    return [TZTabBarController shareInstance];
}

+ (void)addChildViewController:(UIViewController *)viewController normalImageName:(NSString *)normalImageName selectedImageName:(NSString *)selectedImageName isRequiredNavgationController:(BOOL)isRequired
{
    [[TZTabBarController shareInstance] addChildVC:viewController normalImageName:normalImageName selectedImageName:selectedImageName isRequiredNavController:isRequired];
}


+ (void)setTabbarMiddleButtonClick:(void (^)(BOOL))middleClickBlock
{
    TZTabBar *tabbar = (TZTabBar *)[TZTabBarController shareInstance].tabBar;
    tabbar.middleClickBlock = middleClickBlock;
}

+ (void)setNavigationBarGlobalBackGroundImage:(UIImage *)globalImage
{
    [TZNavBar setGlobalBackGroundImage:globalImage];
}

+ (void)setNavigationBarGlobalTextColor:(UIColor *)globalTextColor andFontSize:(CGFloat)fontSize
{
    [TZNavBar setGlobalTextColor:globalTextColor andFontSize:fontSize];
}

其实我们注意观察一下可以发现,我们只不过是对之前自定义的tabbarController,tabbar,navbar这些类的方法做了二次封装,然后根据需要对外界暴露了我们想要公开的API,这样做的好处是,不需要再向外界交代太多信息,只需要让外界和我们的中间层交互就可以使用我们的私有库里面的内容。

  • 那么按照我们对私有库升级的步骤来操作就可以了,首先修改spec文件的版本号,然后提交代码到我们的远程代码仓库,并且打上tag值
  • 我们校验的时候发现还是和之前一样提示我们找不到Category库,但是不必在意直接提交就可以了,毕竟此时的确找不到私有库
  • 上传.spec文件到本地索引库,接着会自动将.spec文件推送到远程索引库


  • 紧接自然是进入到宿主工程中重新安装我们的TZSoundMain私有库,记得要将podfile.lock文件删除掉


    10.png

我们看看宿主工程中有没有将我们的披露API的中间层安装进来


  • 接下来我们要将appdelegate之前使用加载主骨架的代码全部重构
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    UITabBarController *rootVC = [MainModuleAPI rootTabBarController];
    [MainModuleAPI addChildViewController:[TestVC new] normalImageName:@"tabbar_find_n" selectedImageName:@"tabbar_find_h"  isRequiredNavgationController:YES];
    [MainModuleAPI addChildViewController:[UIViewController new] normalImageName:@"tabbar_sound_n" selectedImageName:@"tabbar_sound_h" isRequiredNavgationController:YES];
    [MainModuleAPI addChildViewController:[UIViewController new] normalImageName:@"tabbar_download_n" selectedImageName:@"tabbar_download_h" isRequiredNavgationController:YES];
    [MainModuleAPI addChildViewController:[UIViewController new] normalImageName:@"tabbar_me_n" selectedImageName:@"tabbar_me_h" isRequiredNavgationController:YES];
    
    [MainModuleAPI setTabbarMiddleButtonClick:^(BOOL isPlaying) {
        if (isPlaying) {
            NSLog(@"播放");
        }else {
            NSLog(@"暂停");
        }
    }];

    self.window.rootViewController = rootVC;
    [self.window makeKeyAndVisible];
    
    return YES;
}

  • 那么最后我们看看效果是不是和之前宿主工程一般无二

那么组件化披露API就讲完了,到目前为止组件化的基础就全部讲完了,接下来就真正的带着大家一点点来完善整个项目了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容