?LJTabPager(Github地址:LJTabPager)
自己寫的一個開源控件,高仿iOS版網(wǎng)易云音樂發(fā)現(xiàn)音樂和搜索音樂結(jié)果頁面左右滑動切換效果(標題下面的紅色短線會自動改變長度)啄骇,如圖所示:
要使用也很簡單冠场,只需要
LJTabPagerVC *pagerVC = [[LJTabPagerVC alloc] init];
然后給pagerVC提供一個提供視圖控制器的數(shù)據(jù)源:
pagerVC.vcsSource = _source;
這個數(shù)據(jù)源要服從`LJTabPagerVCsSource`協(xié)議灾搏,這個協(xié)議有三個方法:
- (NSInteger)numberOfViewControllers; /// 要展示的視圖控制器數(shù)量
- (NSArray *)titles; /// 要展示的標題數(shù)組
- (UIViewController *)viewControllerAtIndex:(NSInteger)index; /// 在位置index的視圖控制器漂羊。
主要講一下`- (UIViewController *)viewControllerAtIndex:(NSInteger)index;`這個代理方法稽寒,當滑動到某個位置缚态,該位置的視圖控制器不存在時磁椒,會向數(shù)據(jù)源請求獲取這個控制器。這樣做主要是為了實現(xiàn)懶加載玫芦。比如網(wǎng)易新聞有十幾個標題浆熔,不可能一開始就去創(chuàng)建對應的十幾個控制器,只有用戶滑到對應的位置才去創(chuàng)建對應的視圖控制器桥帆,以節(jié)省內(nèi)存医增。另外,當用戶瀏覽了這十幾個控制器老虫,這十幾個控制器都在內(nèi)存中叶骨,會占用比較多的內(nèi)存,這時可以調(diào)用LJTabPager的`- (void)reloadVCsExceptSelected:(BOOL)exceptSelected`方法祈匙,傳入YES參數(shù)忽刽,把除當前展示的控制器以外的控制器移除,以降低內(nèi)存占用夺欲。當用戶再左右滑動時跪帝,由于對應的控制器不存在了,所以又去重新向vcsSource數(shù)據(jù)源獲取對應的控制器些阅。
若想使某個viewController在被選中或滑到了它時收到通知伞剑,只需讓它服從`LJTabPagerVCDelegate`協(xié)議,然后實現(xiàn)`- (void)hasBeenSelectedAndShown`方法市埋。
默認pagerTabBar的背景色是半透明的黎泣,你也可以通過`LJTabPagerVC`的 `tabBarBKColor`屬性自定義它的背景色恕刘。
可以通過`LJTabPagerVC`的`selectedLineColor`屬性自定義滾動條的顏色。
可以通過`LJTabPagerVC`的`selectedTabItemColor`屬性自定義選中按鈕的顏色聘裁。
Github地址:LJTabPager