?LJTabPager(Github地址:LJTabPager)
自己寫的一個開源控件,高仿iOS版網易云音樂發現音樂和搜索音樂結果頁面左右滑動切換效果(標題下面的紅色短線會自動改變長度),如圖所示:
要使用也很簡單,只需要
LJTabPagerVC *pagerVC = [[LJTabPagerVC alloc] init];
然后給pagerVC提供一個提供視圖控制器的數據源:
pagerVC.vcsSource = _source;
這個數據源要服從`LJTabPagerVCsSource`協議,這個協議有三個方法:
- (NSInteger)numberOfViewControllers; /// 要展示的視圖控制器數量
- (NSArray *)titles; /// 要展示的標題數組
- (UIViewController *)viewControllerAtIndex:(NSInteger)index; /// 在位置index的視圖控制器。
主要講一下`- (UIViewController *)viewControllerAtIndex:(NSInteger)index;`這個代理方法,當滑動到某個位置,該位置的視圖控制器不存在時,會向數據源請求獲取這個控制器。這樣做主要是為了實現懶加載。比如網易新聞有十幾個標題,不可能一開始就去創建對應的十幾個控制器,只有用戶滑到對應的位置才去創建對應的視圖控制器,以節省內存。另外,當用戶瀏覽了這十幾個控制器,這十幾個控制器都在內存中,會占用比較多的內存,這時可以調用LJTabPager的`- (void)reloadVCsExceptSelected:(BOOL)exceptSelected`方法,傳入YES參數,把除當前展示的控制器以外的控制器移除,以降低內存占用。當用戶再左右滑動時,由于對應的控制器不存在了,所以又去重新向vcsSource數據源獲取對應的控制器。
若想使某個viewController在被選中或滑到了它時收到通知,只需讓它服從`LJTabPagerVCDelegate`協議,然后實現`- (void)hasBeenSelectedAndShown`方法。
默認pagerTabBar的背景色是半透明的,你也可以通過`LJTabPagerVC`的 `tabBarBKColor`屬性自定義它的背景色。
可以通過`LJTabPagerVC`的`selectedLineColor`屬性自定義滾動條的顏色。
可以通過`LJTabPagerVC`的`selectedTabItemColor`屬性自定義選中按鈕的顏色。
Github地址:LJTabPager