小知识点好东西iOS进阶指南

【干货】每个APP都用得上的SegmentView

2018-08-14  本文已影响227人  开源者联盟
JXCategoryView.png

腾讯新闻、网易新闻、今日头条、QQ音乐、京东、爱奇艺等所有主流APP分类切换滚动视图

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

Github地址

下载源码,一睹为快!JXCategoryView

效果预览

说明 Gif
颜色渐变 TitleColorGradient.gif
大小缩放 Zoom.gif
指示器LineView LineView.gif
指示器LineView京东风格 JDLineStyle.gif
指示器LineView爱奇艺风格 IQIYILineStyle.gif
指示器EllipseLayer BackgroundEllipseLayer.gif
指示器EllipseLayer遮罩 TitleMask.gif
指示器ImageView(小船) IndicatorImageView.gif
指示器滚动效果(足球) Football.gif
指示器背景图(菜篮) BackgroundImageView.gif
SegmentedControl SegmentedControl.gif
导航栏使用 SegmentedControlNavi.gif
分割线 SeparatorLine.gif
TitleImage_Top TitleImageTop.gif
TitleImage_Left TitleImageLeft.gif
TitleImage_Bottom TitleImageBottom.gif
TitleImage_Right TitleImageRight.gif
TitleImage_OnlyImage TitleImageOnlyImage.gif
自定义-数字 Number.gif
个人主页(上下左右滚动、header悬浮) UserProfile.gif

要求

安装

手动

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

CocoaPods

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

结构图

JXCategoryViewStructure.png

常用属性说明

多个属性可以任意搭配使用,但是效果需要自己把控,效果不是越多越好哟

属性 说明
defaultSelectedIndex 默认选中的index,用于初始化时指定选中某个index
selectedIndex 只读属性,当前选中的index
cellWidth cell的宽度,默认:JXCategoryViewAutomaticDimension
cellSpacing cell之间的间距,默认20
averageCellWidthEnabled 当cell内容总宽度小于JXCategoryBaseView的宽度,是否将cellWidth均分。默认为YES。
contentScrollView 需要关联的contentScrollView,内部监听contentOffset
titleColor titleLabel未选中颜色 默认:[UIColor blackColor]
titleSelectedColor titleLabel选中颜色 默认:[UIColor redColor]
titleFont titleLabel的字体 默认:[UIFont systemFontOfSize:15]
titleColorGradientEnabled title的颜色是否渐变过渡 默认:NO
titleLabelMaskEnabled titleLabel是否遮罩过滤 默认:NO
JXCategoryLineStyle 京东、爱奇艺效果 默认:None
JXCategoryTitleImageType 图片所在位置:上面、左边、下面、右边 默认:左边
backgroundContainerView 承载背景指示器视图的容器,比如backgroundEllipseLayer、backgroundImageView
indicatorLineViewShowEnabled 是否显示指示器LineView 默认:YES (颜色、宽高可以设置)
indicatorImageViewShowEnabled 指示器ImageView是否展示 默认:NO (indicatorImageView公开、宽高可以设置)
indicatorImageViewRollEnabled 指示器ImageView是否滚动(足球效果) 默认:NO
backgroundEllipseLayerShowEnabled 指示器backgroundEllipseLayer是否展示 默认:NO (颜色、宽、高、圆角、宽度补偿可以设置)
zoomEnabled cell是否缩放 默认:NO
zoomScale cell缩放比例 默认:1.2
separatorLineShowEnabled cell分割线是否展示 默认:NO (颜色、宽高可以设置)
backgroundImageViewShowEnabled backgroundImageView是否展示 默认:NO (backgroundImageView公开、宽高可以设置)

使用

self.categoryView = [[JXCategoryTitleView alloc] initWithFrame:CGRectMake(0, 0, WindowsSize.width, categoryViewHeight)];
self.categoryView.delegate = self;
self.categoryView.contentScrollView = self.scrollView;
//------配置各类属性------//
[self.view addSubview:self.categoryView];

数据源、属性配置有变动时(比如从服务器拉取回来数据),需要调用reloadDatas方法刷新状态。

子类化注意事项

任何子类化,view、cell、cellModel三个都要子类化,即使某个子类cell什么事情都不做。用于维护继承链,以免以后子类化都不知道要继承谁了

子类化cell样式

主要重载的方法,参考:JXCategoryTitleView、JXCategoryTitleImageView、JXCategoryNumberView

指示器样式自定义

参考:JXCategoryComponentView、JXCategoryBackgroundImageView、JXCategoryLineStyleView

侧滑手势

首先,在viewDidAppear加上下面代码:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    self.navigationController.interactivePopGestureRecognizer.enabled = (self.categoryView.selectedIndex == 0);
}

系统默认返回Item

#pragma mark - JXCategoryViewDelegate
- (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index {
    self.navigationController.interactivePopGestureRecognizer.enabled = (index == 0);
}

自定义导航栏返回Item

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}
#pragma mark - JXCategoryViewDelegate
- (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index {
    self.navigationController.interactivePopGestureRecognizer.enabled = (index == 0);
}

contentScrollView

#pragma mark - JXCategoryViewDelegate
- (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index {
    [self.scrollView setContentOffset:CGPointMake(self.scrollView.bounds.size.width*index, 0) animated:YES];
}

补充

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

Github地址

下载源码,一睹为快!JXCategoryView

上一篇下一篇

猜你喜欢

热点阅读