日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BBSSDK论坛移动化实现方案

發(fā)布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BBSSDK论坛移动化实现方案 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一.產(chǎn)品介紹
BBS是一個論壇SDK項目,用戶通過簡單的幾句代碼就可以集成整個論壇模塊.項目通過模塊化開發(fā),多個模塊功能分離,用戶可以選擇需要的模塊進行集成.
二.BBS整體結(jié)構(gòu)
BBS的整體結(jié)構(gòu)如下圖所示:?


BBS由三大核心模塊組成:MOBFondation.framework,BBSSDK.framework,BBSSDKUI.framework.


MOBFondation.framework是公有framework,里面封裝了一系列通用的功能模塊,比如獲取設(shè)備信息,加解密,Native和js的橋接,網(wǎng)絡(luò)處理,數(shù)據(jù)解析......


BBSSDK.framework是數(shù)據(jù)framework,內(nèi)部封裝了所有數(shù)據(jù)接口.BBSSDK.framework可以獨立作為SDK進行使用,只需要自己寫UI,調(diào)用BBSSDK.framework,就能夠?qū)崿F(xiàn)論壇項目的開發(fā).不過由于BBSSDK.framework引用了MOBFondation.framework,所以在使用BBSSDK.framework時,需要添加MOBFondation.framework.


BBSSDKUI.framework是對界面的封裝,它以BBSSDK.framework為接口,穿插MOBFondation.framework的使用,包裝成一個完整的論壇UI模塊,開發(fā)者集成這個framework,可以通過簡單的幾句代碼實現(xiàn)BBS的接入.


ShareSDK和MobLink通過弱引用的方式實現(xiàn)了BBSSDKUI的拓展,通過ShareSDK實現(xiàn)了對分享功能的支持,通過MobLink實現(xiàn)了對網(wǎng)頁跳轉(zhuǎn)App的支持.對于如何實現(xiàn)的弱引用,下文會有涉及.


三.BBSSDKUI功能解析


BBSSDKUI分為簡約版和時尚版兩個版本,各自的主界面如下圖所示:?



這兩個版本除了展示效果的不同,功能完全一致.簡約版注重UI的簡潔,界面清晰利落.時尚版追求UI的炫酷,里面實現(xiàn)了很多毛玻璃,動畫等效果.具體選擇哪個版本,依據(jù)不同業(yè)務(wù)需求而定.


主界面展示了論壇和門戶兩大模塊.這兩個模塊實現(xiàn)不同業(yè)務(wù)功能,但并不一定全部展示.展示哪個模塊由后臺決定,用戶可以通過后臺進行手動配置.


我們看一下BBSSDKUI的功能結(jié)構(gòu):?


四.源碼解讀
開屏策略

開屏策略提供了全局必要配置,通過調(diào)用如下接口實現(xiàn):

/**獲取全局配置@param result 回調(diào)*/ + (void)getGlobalSettings:(void(^)(NSDictionary *settings, NSError *error))result;復(fù)制代碼

由于開屏策略必須在調(diào)用其他接口之前完成,所以這里使用了信號量進行控制: 在時尚版的BBSUIHomeViewController里,

self.semaphore = dispatch_semaphore_create(0);self.queue = dispatch_queue_create("HomeViewControllerQueue", DISPATCH_QUEUE_SERIAL);dispatch_async(_queue, ^{//阻塞線程,直到獲取配置信息完成之后dispatch_semaphore_wait(self.semaphore, DISPATCH_TIME_FOREVER);});[BBSSDK getGlobalSettings:^(NSDictionary *settings, NSError *error) {if (!error && settings){......dispatch_semaphore_signal(self.semaphore);}}];復(fù)制代碼

主界面上滑左右滑效果


在時尚版的主頁以及時尚版的個人中心,我們從上面的圖中可以看到,tableView可以左右滑動,也可以上下滑動.當TableView左右滑動的時候,其"header"不會跟著滑動,而當TableView上下滑動的時候,其"header"會跟著滑動.這種效果是怎么實現(xiàn)的呢?

我們先看看這種效果的UI結(jié)構(gòu):

?可見,UI大致是通過上下兩個ScrollView實現(xiàn)的.最外層的ScrollView用來切換各個子視圖(TableView).內(nèi)層的ScrollView(即TableView)上下滑動.表頭其實是一個UIView,通過監(jiān)聽TableView的contentOffSet,對表頭進行Frame設(shè)置.

BBSUIPortalViewController:/**這里通過封裝將TableView的實現(xiàn)集成到BBSUIThreadListViewController里,通過block的方式拿到contentOffSet*/ for (BBSPortalCatefories *obj in self.categoriesList) {BBSUIThreadListViewController *vc = [[BBSUIThreadListViewController alloc] initWithCatid:obj.catid allowcomment:obj.allowcomment];vc.viewType = BBSUIThreadListViewTypePortal;[vcs addObject:vc];[titles addObject:obj.catname];vc.offSetBlock = ^(CGFloat offSet){// NSLog(@"============== %f",offSet);[self setContentOffSet:offSet];};vc.refreshBannerBlock = ^(NSArray *bannnerList, NSError *error) {[self _refreshBannerWithBannnerList:bannnerList error:error];}; }復(fù)制代碼/**進行表頭Frame的處理*/ - (void)setContentOffSet:(CGFloat)offSet {CGRect frame = self.headerView.frame;frame.origin.y = -offSet + _iphoneXTopPadding;self.headerView.frame = frame;_lastTableViewOffsetY = offSet;// 考慮到segmentBar,在到達navigationbar位置的時候,segmentBar需要"懸停"if (offSet <= 245 - 64){CGRect segmentFrame = self.segmentControl.frame;segmentFrame.origin.y = 245-offSet + _iphoneXTopPadding;self.segmentControl.frame = segmentFrame;}else{CGRect segmentFrame = self.segmentControl.frame;segmentFrame.origin.y = 64 + _iphoneXTopPadding;self.segmentControl.frame = segmentFrame;}if (self.offSetBlock){self.offSetBlock(offSet);} }復(fù)制代碼

弱引用的實現(xiàn)


BBSSDKUI對ShareSDK和MobLink采取弱引用的集成方式.在集成BBSSDKUI.framework的時候,即使不添加ShareSDK和MobLink這兩個模塊,也不會報錯,只不過相關(guān)的功能不能使用而已.這和對BBSSDK.framework和MOBFondation.framework的強依賴是不一樣的.


怎么實現(xiàn)的呢?


在項目初始化的時候,MOBFondation會通過hock的方式拿到所有的類名,在使用這個SDK的時候,通過協(xié)議的方式間接拿到這個類,然后通過私有方法進行調(diào)用.

- (void)_authLoginWithType:(NSInteger)type {......NSArray *components = [[MOBFComponentManager defaultManager] getComponents:@protocol(IMOBFShareComponent)];if (components.count > 0) {id<IMOBFShareComponent> ShareComponent = components[0];if (ShareComponent && [ShareComponent conformsToProtocol:@protocol(IMOBFShareComponent)]){[SVProgressHUD show];[ShareComponent authorize:authType settings:nil onStateChanged:^(NSInteger state, id<IMOBFSocialUser> user, NSError *error) {......}];}}else{NSLog(@"沒有接入ShareSdk");} }復(fù)制代碼

這種方式避免了強依賴導(dǎo)致的高耦合,在接入過程中,可以選擇性的接入需要的組件,不需要的組件可以不接入,但也不會報錯.

總結(jié)

以上是生活随笔為你收集整理的BBSSDK论坛移动化实现方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。