美文网首页iOS开源&高仿项目精选iOS DeveloperiOS-布局动画
高仿iOS版网易云音乐发现音乐页面左右滑动切换效果,增强版

高仿iOS版网易云音乐发现音乐页面左右滑动切换效果,增强版

作者: iOS腾蛟起凤 | 来源:发表于2017-08-24 10:06 被阅读160次

    自己写的一个开源控件,高仿iOS版网易云音乐发现音乐和搜索音乐结果页面左右滑动切换效果,如图所示:

    LJTabPager.gif

    动态图显示不了请点这里

    要使用也很简单,只需要

    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数据源获取对应的控制器。

    例如:

    - (NSInteger)numberOfViewControllers {
        return 8;
    }
    
    - (NSArray *)titles {
        NSArray *array = @[@"个性推荐", @"歌单", @"主播电台", @"排行榜", @"用户", @"歌手", @"专辑", @"单曲"];
        return array;
    }
    
    - (UIViewController *)viewControllerAtIndex:(NSInteger)index {
        TableViewController *controller = [[TableViewController alloc] init];
        switch (index) {
            case 0:
                controller.title = @"个性推荐";
                break;
            case 1:
                controller.title = @"歌单";
                break;
            case 2:
                controller.title = @"主播电台";
                break;
            case 3:
                controller.title = @"排行榜";
                break;
            case 4:
                controller.title = @"用户";
                break;
            case 5:
                controller.title = @"歌手";
                break;
            case 6:
                controller.title = @"专辑";
                break;
            case 7:
                controller.title = @"单曲";
                break;
            default:
                break;
        }
        return controller;
    }
    

    若想使某个viewController在被选中或滑到了它时收到通知,只需让它服从LJTabPagerVCDelegate协议,然后实现- (void)hasBeenSelectedAndShown方法。

    默认pagerTabBar的背景色是半透明的,你也可以通过LJTabPagerVCtabBarBKColor属性自定义它的背景色。

    可以通过LJTabPagerVCselectedLineColor属性自定义滚动条的颜色。

    可以通过LJTabPagerVCselectedTabItemColor属性自定义选中按钮的颜色。

    GitHub地址

    相关文章

      网友评论

        本文标题:高仿iOS版网易云音乐发现音乐页面左右滑动切换效果,增强版

        本文链接:https://www.haomeiwen.com/subject/knmsdxtx.html