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