pujiaxin33 / JXCategoryView

A powerful and easy to use category view (segmentedcontrol, segmentview, pagingview, pagerview, pagecontrol) (腾讯新闻、今日头条、QQ音乐、网易云音乐、京东、爱奇艺、腾讯视频、淘宝、天猫、简书、微博等所有主流APP分类切换滚动视图)
MIT License
6.08k stars 1.15k forks source link
category categoryview collectionview indicator ios objective-c page pagecontrol pageview pagingview scrollview segment segmentedcontrol segmentedview

platform languages cocoapods support

A powerful and easy to use category view (segmentedcontrol, segmentview, pagingview, pagerview, pagecontrol) (腾讯新闻、今日头条、QQ 音乐、网易云音乐、京东、爱奇艺、腾讯视频、淘宝、天猫、简书、微博等所有主流 APP 分类切换滚动视图)

与其他的同类三方库对比的优点:

Swift版本

如果你在找 Swift 版本,请点击查看 JXSegmentedView

效果预览

指示器效果预览

说明 Gif
LineView
LineView延长
LineView延长+偏移
LineView🌈彩虹风格
DotLineView点线效果
BallView QQ黏性红点
TriangleView 三角形底部
TriangleView 三角形顶部
BackgroundView椭圆形
BackgroundView椭圆形+阴影
BackgroundView长方形
BackgroundView遮罩有背景
BackgroundView遮罩无背景
BackgroundView渐变色
ImageView底部(小船)
ImageView背景(最佳男歌手)
ImageView滚动效果(足球)
混合使用

以下均支持上下位置切换: JXCategoryIndicatorLineViewJXCategoryIndicatorImageViewJXCategoryIndicatorBallViewJXCategoryIndicatorTriangleView

Cell样式效果预览

说明 Gif
颜色渐变
大小缩放
大小缩放+底部锚点
大小缩放+顶部锚点
大小缩放+字体粗细
大小缩放+点击动画
大小缩放+cell宽度缩放
TitleImage_Top
TitleImage_Left
TitleImage_Bottom
TitleImage_Right
cell图文混用
Image
数字
红点
多行文本
多行富文本
Cell背景色渐变
分割线

特殊效果预览

说明 Gif
数据源过少
averageCellSpacingEnabled默认为YES
数据源过少
averageCellSpacingEnabled为NO
SegmentedControl
参考SegmentedControlViewController
导航栏使用
参考NaviSegmentedControlViewController
嵌套使用
参考NestViewController
个人主页(上下左右滚动、header悬浮)
参考PagingViewController
更多样式请点击查看JXPagingView库
垂直列表滚动
参考VerticalListViewController
高仿腾讯视频
支持UITableView,参考VerticalListTableViewController
(背景色异常是录屏软件bug)
垂直缩放(仿网易圈圈、脉脉首页)
参考ScrollZoomViewController
数据源刷新&列表数据加载
参考LoadDataListContainerViewController
上下滚动隐藏导航栏
京东首页-滚动渐变变小

自定义效果预览

收录来自其他使用者的自定义示例,这些自定义类只在 Demo 项目里面,Pod 库并没有这些文件。所以,如果你需要使用这些自定义效果,请通过文件导入的方式。

目的:

欢迎提 PullRequest 进行收录你的自定义效果。

说明 Gif
Spring动画指示器
富文本数量cell
左右对齐指示器
秒杀时间线cell
京东商品排序cell
title背景块cell

要求

安装

手动

Clone 代码,把 Sources 文件夹拖入项目,#import "JXCategoryView.h" 就可以使用了。

CocoaPods

target '<Your Target Name>' do
    pod 'JXCategoryView'
end

先执行 pod repo update,再执行 pod install

结构图

使用

JXCategoryTitleView 使用示例

  1. 初始化 JXCategoryTitleView

    self.categoryView = [[JXCategoryTitleView alloc] initWithFrame:CGRectMake(0, 0, WindowsSize.width, 50)];
    self.categoryView.delegate = self;
    [self.view addSubview:self.categoryView];
  2. 配置 JXCategoryTitleView 的属性:

    self.categoryView.titles = @[@"螃蟹", @"麻辣小龙虾", @"苹果"...];
    self.categoryView.titleColorGradientEnabled = YES;
  3. 添加指示器:

    JXCategoryIndicatorLineView *lineView = [[JXCategoryIndicatorLineView alloc] init];
    lineView.indicatorColor = [UIColor redColor];
    lineView.indicatorWidth = JXCategoryViewAutomaticDimension;
    self.categoryView.indicators = @[lineView];
  4. 实现 JXCategoryViewDelegate 代理(可选)

    
    // 点击选中或者滚动选中都会调用该方法。适用于只关心选中事件,不关心具体是点击还是滚动选中的。
    - (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index;

// 点击选中的情况才会调用该方法

// 滚动选中的情况才会调用该方法

// 正在滚动中的回调

列表容器使用示例

JXCategoryListContainerView 封装类使用示例

JXCategoryListContainerView 是对列表视图高度封装的类,具有以下优点:

  1. 初始化 JXCategoryListContainerView 并关联到 categoryView

    self.listContainerView = [[JXCategoryListContainerView alloc] initWithType:JXCategoryListContainerType_ScrollView delegate:self];
    [self.view addSubview:self.listContainerView];
    // 关联到 categoryView
    self.categoryView.listContainer = self.listContainerView;
  2. 实现 JXCategoryListContainerViewDelegate 代理方法:

    // 返回列表的数量
    - (NSInteger)numberOfListsInlistContainerView:(JXCategoryListContainerView *)listContainerView {
    return self.titles.count;
    }
    // 根据下标 index 返回对应遵守并实现 `JXCategoryListContentViewDelegate` 协议的列表实例
    - (id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index {
    return [[ListViewController alloc] init];
    }
  3. 列表实现 JXCategoryListContentViewDelegate 代理方法 不管列表是 UIView 还是 UIViewController 都可以,提高使用灵活性,更便于现有的业务接入。

    // 返回列表视图
    // 如果列表是 VC,就返回 VC.view
    // 如果列表是 View,就返回 View 自己
    - (UIView *)listView {
    return self.view;
    }

具体点击 LoadDataListContainerViewController 查看源代码了解

直接使用 UIScrollView 自定义

因为代码量较多且分散,所有不推荐使用该方法。要正确使用需要注意的地方比较多,尤其对于刚接触 iOS 的同学来说不太友好。

不直接贴代码了,具体点击 LoadDataListCustomViewController 查看源代码了解。

常见问题和答案

❗️❗️❗️这里面包含了许多常见问题和答案,使用之前请务必浏览此文档,或者遇到问题先看此文档❗️❗️❗️

常见问题和答案总文档

指示器样式自定义

Cell 自定义

常用属性说明

常用属性说明文档地址

更新记录

补充

如果刚开始使用JXCategoryView,当开发过程中需要支持某种特性时,请务必先搜索使用文档或者源代码。确认是否已经实现支持了想要的特性。请别不要文档和源代码都没有看,就直接提问,这对于大家都是一种时间浪费。如果没有支持想要的特性,欢迎提Issue讨论,或者自己实现提一个PullRequest。

该仓库保持随时更新,对于主流新的分类选择效果会第一时间支持。使用过程中,有任何建议或问题,可以通过以下方式联系我:
邮箱:317437084@qq.com
QQ群: 112440473

喜欢就star❤️一下吧

License

JXCategoryView is released under the MIT license.