美文网首页iOS DeveloperiOS 开发
简单实现分页滚动效果

简单实现分页滚动效果

作者: 改变自己_now | 来源:发表于2016-03-26 16:44 被阅读601次

有段时间没有更新东西,原因是工作变动,一直没有精力去总结一些东西。最近公司项目中需要用到类似网易新闻滚动的效果,可以先一张效果图,后面在分析实现的过程,这里只是简单的实现了一下效果,没有考虑重用机制的问题,希望大神给个思路。这里是demo
效果如下:

yj_demo.gif

思路:我把他们分成两个部分,顶部标题部分和下面的滚动视图部分,上面也用一个scrollview搞定,下面用scrollview来显示,scrollview中需要加载多个控制器中的view,这两个scrollview则加载一个View上面、

一、顶部滚动标题的封装

为了代码的重用,我决定把上面的顶部滚动标题封装一个整块view,该view命名为MNTopTitleBar(名字可以随便取),外界需要的属性就是提供一个标题数组,还有设置标题按钮的宽度,什么字体大小啊,字体颜色啊,我都还写,这里先实现效果,不考虑的那么复杂。就是给我一个数组,我就是创建可以滚动的标题。

我相信上面的思路很简单,就能实现了,主要贴上多个标题的时候点击标题滚动到合适的位置的代码,其他也没什么难度,有兴趣的可以下载demo看看,希望大家多提意见。

[UIView animateWithDuration:0.25 animations:^{
    
    self.indexView.centerX = button.centerX;
}];

//跳转contensize

// 如果数量不够就不需要调整
if (self.backScrollView.width<self.width) {
    
    return;
}
//按钮的中心
CGFloat centerX = button.centerX;
//该控件的宽度
CGFloat scrollViewW = self.width;

CGFloat leftX = centerX - scrollViewW*0.5;
if (leftX<0) {
    
    leftX = 0;
}

//计算最右边能滚动最大的距离
CGFloat maxOffSetX = self.backScrollView.contentSize.width -scrollViewW;
if (leftX>maxOffSetX) {
    
    leftX = maxOffSetX;
}

[UIView animateWithDuration:0.25 animations:^{
    
    [self.backScrollView setContentOffset:CGPointMake(leftX, 0)];
}];

另外这里需要说明,frame的设置,我自己写了UIView的一个分类,这是设置坐标就方便了很多。

二、创建

首先看看创建这个view需要的属性

@interface YJTabPageView : UIView
/**
 *  子控制器数组
 */
@property (strong,nonatomic) NSArray *viewControllers;
/**
 *  所属父类控制
 */
@property (strong,nonatomic) UIViewControlle*parentViewController;

/**
 * 标题数组
 */
@property (strong,nonatomic) NSArray *topBarTitles;

@property (copy,nonatomic) void(^pageChageBlock)(    UIViewController *viewController, NSUInteger index);  // 滚动页面发生改变时候的Block

- (void)setPageChageBlock:(void (^)(UIViewController *viewController, NSUInteger index))pageChageBlock;

@end

思路:所有控制器都交给该view的父类控制器来管理,所有的view都添加到下面的scrollview·上面的来显示,监听滚动事件来改变上面标题的状态,上面也是一样。创建代码如下。

 _bottomScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 44, self.width, self.height-44)];
_bottomScrollView.showsHorizontalScrollIndicator = NO;
_bottomScrollView.showsVerticalScrollIndicator = NO;
_bottomScrollView.pagingEnabled = YES;
_bottomScrollView.delegate = self;
[self addSubview:_bottomScrollView];

for (int i = 0; i<viewControllers.count; i++) {
    
    YJTestViewController *vc = viewControllers[i];
    vc.view.frame = CGRectMake(i*_bottomScrollView.width, 0, _bottomScrollView.width, _bottomScrollView.height);
    [_bottomScrollView addSubview:vc.view];
    
    [self.parentViewController addChildViewController:vc];
}

_bottomScrollView.contentSize = CGSizeMake(_bottomScrollView.width*viewControllers.count, _bottomScrollView.height);

另外说明刷一下刷新控制用了第三方的MJRefresh。有兴趣的下载demo看下,发现错误希望指正,也希望大神关于重用给我点思路。谢谢!

相关文章

  • 简单实现分页滚动效果

    有段时间没有更新东西,原因是工作变动,一直没有精力去总结一些东西。最近公司项目中需要用到类似网易新闻滚动的效果,可...

  • UIScrollView - 图片轮播器

    效果图 图片横向手动滚动 1.1 自定义图片 1.2 设置contentSize 1.3 实现手动分页1.3.1 ...

  • iOS 快速实现分页界面的搭建。

    iOS 快速实现分页界面的搭建。 项目中我们经常会遇到滚动分页的设计效果,被用来对不同数据界面的展示进行分类。我...

  • Flutter如何实现视差滚动?

    Flutter如何实现视差滚动? 效果如下: 在Flutter 中实现视差滚动,非常简单,Flutter已经提供相...

  • RecyclerView的刷新分页

    在开发中常常使用到刷新分页,这里实现一个 RecyclerView 的简单的刷新分页操作,测试效果见文末,实现过程...

  • 利用CSS3简单实现的大图滚动效果

    利用CSS3简单实现的大图滚动效果 抛弃原生JavaScript实现大图滚动,抛弃JQ,抛弃插件,今天突然想使用C...

  • Vue滚动底部分页实现

    滚动到底部分页实现的原理:1.监听滚动事件,滚动到底部100px的时候去请求接口获取分页数据2.将接口返回的数据和...

  • React 列表向上、向下循环滚动

    实现的效果: 实现步骤 开始滚动:setInterval() 定时调用滚动方法停止滚动:clearInterval...

  • cocos creator项目实战【滚动的数字】教程

    待完善,实现多位数的滚动效果) x的ccc引擎的label组件已经自带简单的数字滚动效果,准备自定义字体配合lab...

  • javascript实现分页效果

    网站分页功能是必不可少的,一般用在列表页面中,javascript实现分页效果,效果如下: 实现代码 html结构...

网友评论

    本文标题:简单实现分页滚动效果

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