• Stars
    star
    1,109
  • Rank 41,870 (Top 0.9 %)
  • Language
    Objective-C
  • License
    MIT License
  • Created over 8 years ago
  • Updated almost 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

网易新闻, 腾讯视频, 头条 等首页的滑块视图联动的效果OC版的简单方便的集成, 滑块 segmentVIew, scrollViewController(Providing an easy way to reach the effect that "the segment scrolls with the content")

ZJScrollPageView

OC版的简单方便的集成网易新闻, 腾讯视频, 头条 等首页的滑块视图联动的效果, segmentVIew, scrollViewController

swift版本的请点这里

注意,如果您需要查看详细的注释, 可以下载swift版本里面, 这里很多地方就没有把注释移过来了


使用示例效果

滚动示例1.gif滚动示例2.gif滚动示例3.gif

滚动示例4.gif滚动示例5.gif滚动示例6.gif

滚动示例7.gif 滚动示例8.gif

tupian1 tupian2.gif tupian3.gif tupian4.gif


可以简单快速灵活的实现上图中的效果


书写思路移步

简书1

Requirements

  • iOS 7.0+

Installation

  • ###直接将下载文件的ZJScrollPageView文件夹下的文件拖进您的项目中然后#import "ZJScrollPageView.h"就可以使用了

使用cocoaPods, 在你项目的Podfile文件里面添加 pod ZJScrollPageView(未更新)

usage

特别说明

因为大家可能会复用同一个controller来显示内容

  • 在对应的controller的viewWillAppear()等生命周期里面可以根据不同的title来显示不同的内容或者刷新视图

  • 请注意: 如果你希望所有的子控制器的view的系统生命周期方法被正确的调用

  • 请重写父控制器的'shouldAutomaticallyForwardAppearanceMethods'方法 并且返回NO

  • 当然如果你不做这个操作, 子控制器的生命周期方法将不会被正确的调用

  • 如果你仍然想利用子控制器的生命周期方法, 请使用'ZJScrollPageViewChildVcDelegate'提供的代理方法

  • 或者'ZJScrollPageViewDelegate'提供的代理方法


更新说明

  • 2016/05/26 新增了一个通知ScrollPageViewDidShowThePageNotification, 你可以监听这个通知来获取到正在显示的页数, 使用的示例可以参照 ZJSegmentStyle.h里面的说明
  • 2016/05/27 增加了一个style属性 segmentViewBounces, 来设置segmentView是否有弹性
  • 2016/05/27 增加了一个style属性 scrollContentView, 来设置contentView是否能滑动
  • 2016/06/12 增加了一个分类, 提供了 scrollPageParentViewController属性, 方便在每个界面获取到父控制器
  • 2016/06/29 更改了初始化方法, 改为了使用代理来传递相关的自控制器 方便动态更新
  • 2016/06/30 新增加了子控制器遵守的协议ZJScrollPageViewChildVcDelegate, 用于页面出现的时候加载数据
  • 2016/08/21 增加了可以显示图片, 和设置图片的不同位置的功能
  • 2016/10/28 修复一直bug, 保证了子控制器的生命周期方法被正确调用.

可以设置的style效果

/** 是否显示遮盖 默认为NO */
@property (assign, nonatomic, getter=isShowCover) BOOL showCover;
/** 是否显示滚动条 默认为NO*/
@property (assign, nonatomic, getter=isShowLine) BOOL showLine;
/** 是否缩放标题 默认为NO*/
@property (assign, nonatomic, getter=isScaleTitle) BOOL scaleTitle;
/** 是否滚动标题 默认为YES 设置为NO的时候所有的标题将不会滚动, 并且宽度会平分 和系统的segment效果相似 */
@property (assign, nonatomic, getter=isScrollTitle) BOOL scrollTitle;
/** segmentView是否有弹性 默认为NO*/
@property (assign, nonatomic, getter=isSegmentViewBounces) BOOL segmentViewBounces;
/** 是否颜色渐变 默认为NO*/
@property (assign, nonatomic, getter=isGradualChangeTitleColor) BOOL gradualChangeTitleColor;
/** 是否显示附加的按钮 默认为NO*/
@property (assign, nonatomic, getter=isShowExtraButton) BOOL showExtraButton;
/** 内容view是否能滑动 默认为YES*/
@property (assign, nonatomic, getter=isScrollContentView) BOOL scrollContentView;
/** 设置附加按钮的背景图片 默认为nil*/
@property (strong, nonatomic) NSString *extraBtnBackgroundImageName;
/** 滚动条的高度 默认为2 */
@property (assign, nonatomic) CGFloat scrollLineHeight;
/** 滚动条的颜色 */
@property (strong, nonatomic) UIColor *scrollLineColor;
/** 遮盖的颜色 */
@property (strong, nonatomic) UIColor *coverBackgroundColor;
/** 遮盖的圆角 默认为14*/
@property (assign, nonatomic) CGFloat coverCornerRadius;
/** 遮盖的高度 默认为28*/
@property (assign, nonatomic) CGFloat coverHeight;
/** 标题之间的间隙 默认为15.0 */
@property (assign, nonatomic) CGFloat titleMargin;
/** 标题的字体 默认为14 */
@property (strong, nonatomic) UIFont *titleFont;
/** 标题缩放倍数, 默认1.3 */
@property (assign, nonatomic) CGFloat titleBigScale;
/** 标题一般状态的颜色 */
@property (strong, nonatomic) UIColor *normalTitleColor;
/** 标题选中状态的颜色 */
@property (strong, nonatomic) UIColor *selectedTitleColor;
/** segmentVIew的高度, 这个属性只在使用ZJScrollPageVIew的时候设置生效 */
@property (assign, nonatomic) CGFloat segmentHeight;

一. 使用ScrollPageView , 提供了各种效果的组合,但是不能修改segmentView和ContentView的相对位置,两者是结合在一起的

- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"效果示例";

//必要的设置, 如果没有设置可能导致内容显示不正常
self.automaticallyAdjustsScrollViewInsets = NO;

ZJSegmentStyle *style = [[ZJSegmentStyle alloc] init];
//显示遮盖
style.showCover = YES;
style.segmentViewBounces = NO;
// 颜色渐变
style.gradualChangeTitleColor = YES;
// 显示附加的按钮
style.showExtraButton = YES;
// 设置附加按钮的背景图片
style.extraBtnBackgroundImageName = @"extraBtnBackgroundImage";

self.titles = @[@"新闻头条",
                @"国际要闻",
                @"体育",
                @"中国足球",
                @"汽车",
                @"囧途旅游",
                @"幽默搞笑",
                @"视频",
                @"无厘头",
                @"美女图片",
                @"今日房价",
                @"头像",
                ];
// 初始化
CGRect scrollPageViewFrame = CGRectMake(0, 64.0, self.view.bounds.size.width, self.view.bounds.size.height - 64.0);
ZJScrollPageView *scrollPageView = [[ZJScrollPageView alloc] initWithFrame:scrollPageViewFrame segmentStyle:style titles:_titles parentViewController:self delegate:self];
self.scrollPageView = scrollPageView;
// 额外的按钮响应的block
__weak typeof(self) weakSelf = self;


self.scrollPageView.extraBtnOnClick = ^(UIButton *extraBtn){
    weakSelf.title = @"点击了extraBtn";
    NSLog(@"点击了extraBtn");
    
};
[self.view addSubview:self.scrollPageView];

}

代理方法

- (NSInteger)numberOfChildViewControllers {
return self.titles.count;// 传入页面的总数, 推荐使用titles.count
}

- (UIViewController *)childViewController:(UIViewController *)reuseViewController forIndex:(NSInteger)index {

UIViewController *childVc = reuseViewController;
// 这里一定要判断传过来的是否是nil, 如果为nil直接使用并返回
// 如果不为nil 就创建
if (childVc == nil) {
    childVc = [UIViewController new];
    
    if (index%2 == 0) {
        childVc.view.backgroundColor = [UIColor redColor];
    } else {
        childVc.view.backgroundColor = [UIColor cyanColor];

    }
    
}
return childVc;
}

二 使用 ZJScrollSegmentView 和 ZJContentView, 提供相同的效果组合, 但是同时可以分离开segmentView和contentView,可以单独设置他们的frame, 使用更灵活

- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"效果示例";

//必要的设置, 如果没有设置可能导致内容显示不正常
self.automaticallyAdjustsScrollViewInsets = NO;
self.childVcs = [self setupChildVc];
// 初始化
[self setupSegmentView];
[self setupContentView];

}

setupSegmentView

    // 注意: 一定要避免循环引用!!
__weak typeof(self) weakSelf = self;
ZJScrollSegmentView *segment = [[ZJScrollSegmentView alloc] initWithFrame:CGRectMake(0, 64.0, 160.0, 28.0) segmentStyle:style titles:titles titleDidClick:^(UILabel *label, NSInteger index) {
    
    [weakSelf.contentView setContentOffSet:CGPointMake(weakSelf.contentView.bounds.size.width * index, 0.0) animated:YES];
    
}];
// 自定义标题的样式
segment.layer.cornerRadius = 14.0;
segment.backgroundColor = [UIColor redColor];
// 当然推荐直接设置背景图片的方式
//    segment.backgroundImage = [UIImage imageNamed:@"extraBtnBackgroundImage"];

self.segmentView = segment;
self.navigationItem.titleView = self.segmentView;

setupContentView

    ZJContentView *content = [[ZJContentView alloc] initWithFrame:CGRectMake(0.0, 64.0, self.view.bounds.size.width, self.view.bounds.size.height - 64.0) segmentView:self.segmentView parentViewController:self delegate:self];
self.contentView = content;
[self.view addSubview:self.contentView];

代理方法

- (NSInteger)numberOfChildViewControllers {
return self.titles.count;
}

- (UIViewController *)childViewController:(UIViewController *)reuseViewController forIndex:(NSInteger)index {
UIViewController *childVc = reuseViewController;
if (childVc == nil) {
    childVc = self.childVcs[index];
    
    if (index%2 == 0) {
        childVc.view.backgroundColor = [UIColor redColor];
    } else {
        childVc.view.backgroundColor = [UIColor cyanColor];
        
    }
    
}
return childVc;
}

这是我写的<iOS自定义控件剖析>这本书籍中的一个demo, 如果你希望知道具体的实现过程和其他的一些常用效果的实现, 那么你应该能轻易在网上下载到免费的盗版书籍.

当然作为本书的写作者, 还是希望有人能支持正版书籍. 如果你有意购买书籍, 在这篇文章中, 介绍了书籍中所有的内容和书籍适合阅读的人群, 和一些试读章节, 以及购买链接. 在你准备购买之前, 请一定读一读里面的说明. 否则, 如果不适合你阅读, 虽然书籍售价35不是很贵, 但是也是一笔损失.

如果你希望联系到我, 可以通过简书联系到我

License

ScrollPageView is released under the MIT license. See LICENSE for details.

More Repositories

1

ScrollPageView

简单快速灵活的集成类似网易新闻, 头条等带滑块的滚动视图,实现视图联动, 滑块, segment segmentController, scrollViewController
Swift
353
star
2

CollectionViewLayout

自定义collectionViewLayout, 里面提供的布局可以直接拿来使用
Swift
140
star
3

UsefulPickerView

可以简单快速实现点击TextField或者按钮弹出单列, 多列, 多列关联,城市选择, 日期选择的pickerView
Swift
117
star
4

DouYuTVMutate

模仿斗鱼的部分简单页面, 部分使用RxSwift, MVVM, 直播的接口目前不可用, 所以直播部分已经删除
Swift
98
star
5

PhotoBrowser

providing an easy way to reach the effect that looking through photos likes the system photo app (快速集成图片浏览器, 支持屏幕旋转, 加载网络, 本地,以及各种手势 photoBrowser imageBrowser image photo)
Swift
86
star
6

ZJPullToRefresh

easy way to customize loding animation written in swift(下拉刷新, 上拉刷新, 简单方便自定义加载动画)
Swift
37
star
7

ZJCircleProgressView

实现几种常用的圆环形进度条, 饼状进度, 以及彩色加载动画效果
Objective-C
34
star
8

ZJUsefulPickerView

一个很有用的pickerView, 能够快速方便的弹出单列, 多列不关联, 多列关联数据的pickerView, 同时提供省市区联动的pickerView, 日期选择pickerView.
Objective-C
34
star
9

ZJIndexedCitySelect

一个常用的带索引的城市选择列表, 已经处理了拼音首字母搜索城市, 以及热门城市的显示. 美团等经常用到的城市选择
Objective-C
28
star
10

FullScreenPopNavigationController

自定义navigationController的全屏滑动返回
Swift
23
star
11

ZJSwipeTableView

一个可以方便实现自定义的tableView的左右侧滑菜单的效果. 支持四种动画效果. 也同时支持了简书的漂亮的侧滑效果.
Objective-C
15
star
12

CameraView

很方便的实现自定义照相机和摄像机, 本身是一个view, 可以自定义形状和位置等, 方便的闪光灯, 前后摄像头切换...(totally customize the camera , making the camera just the way you like)
Swift
14
star
13

ZJLeadingPageController

App的启动的引导页面---简单demo
Objective-C
13
star
14

ZJTagView

一个collectionView拖动的实现demo, 已经实现网易新闻的标签编辑效果. 标签页面, 频道选择
Objective-C
13
star
15

PPTView

可以使用Kingfisher来自定义加载图片方式的图片轮播器
Swift
11
star
16

ZJPPTViewOC

一个使用方便的轮播器, 可无限循环, 自动轮播, 自定义程度很大, 可以轮播各种形式的内容, 图片, 文字, 按钮... 同时, 内部不依赖第三方库
Objective-C
10
star
17

ZJDrawerController

一个可以很快速实现三种效果的左右抽屉菜单. 也支持缩放效果, 侧滑菜单
Objective-C
8
star
18

ZJIndexedContacts

一个常用的带索引的联系人列表, 同时已经处理好了联系人按拼音排序分组, 已经处理好了联系人按拼音首字母搜索的功能
Objective-C
8
star
19

ZJQRScanner

一个扫描二维码, 生成二维码, 识别图片中的二维码的demo, 可以直接使用
Objective-C
7
star
20

ChangeNavigationBarAlphaDemo

动态改变navigationBar的alpha的几种方法示例
Swift
7
star
21

ZJActionSheet

一个很方便自定义的actionSheet, 已经实现了系统的效果, 不过支持显示图片, 支持自定义, 同时也实现了微信的actionSheet的效果
Objective-C
5
star
22

ZJLaunchAd

一个简单, 方便的启动广告展示, 可以同时展示logo.
Objective-C
5
star
23

DrawingStudy

Swift
3
star
24

ZJLockController

实现了, 一个常用的手势解锁的功能, 已经封装好创建密码, 验证密码 , 修改密码, 删除密码,. 同时简单实现了类似支付宝的支付密码的输入效果, 支付宝手势解锁
Objective-C
2
star
25

ZJNavigationController

一个方便实现全屏滑动返回的navigationController, 同时实现了常用的每一个界面都拥有一个独立的navigationBar的功能.
Objective-C
2
star
26

FirstUseSwift3.0

尝试了一下swift3.0
Swift
1
star
27

ZJProgressHUD

一个类似MBProgressHUD的提示控件, 效果还不错, 实现也很简单, 方便参考和自定义
Objective-C
1
star