关于scrollview的无限滚动效果实现
起因及需求:做过阅读器的朋友应该知道,一般的阅读器都会有仿真、平移等特效。最近赶上真空期,项目不忙,有点时间,于是想抓起来,总结点干货。
仿真翻页及平滑翻页的基本实现:
仿真翻页,使用系统自带的UIPageViewController可以轻松实现流畅的翻页效果,这里暂不详述,后面会专门做一期UIPageViewController实现中实现自定义手势翻页的专题。
平滑(或覆盖)翻页,有能力的可以自定义封装一个controller,用来抓取数据及回调事件,简单说一下实现步骤。
1.controller中主要包含两控制器,一个正在显示的,另一个待显示的
2.自定义tap及pan手势,实现相应的动画
3.待显示的控制器由外界传入,tap动画及pan(交互)动画过程中及结束时可以向外界传出相应的状态
4.动画结束后,记得将状态还原
(效果图暂且不附,免得影响主次)
进入正题,如何实现滚动翻页?
效果图先附一张

关于实现前的误区:
1.章节内容如何无缝拼接?
之前思维一直局限于仿真、平滑的设计思路,就是控制器中包含两控制器,一个当前显示、另一个待显示,然后通过切换数据的方式来实现前后翻页。其实滚屏也可以设计成这种,也就是把每章都分隔开来,滚到底部或顶部时加载另一章,然后显示新的内容即可。这样做能满足大致要求,但是达不到流畅的章节翻页效果。
2.章节拼接后如何实现流畅的滚动?
之前一直陷于一个思维误区,是搬数据还是搬视图?
搬数据:scrollView中仅仅显示一个内容视图,每次切换章节,将新的内容替换,并默默改变scrollview的偏移量,形成无缝切章节的效果。具体来讲内容分上中下三块,快滑到顶部时,底部内容置空,加载上一章,加载出来后,重新拼接上中下内容,此时注意修改scrollView的偏移量;快滑到底部时,一样的处理方式。
搬视图:scrollView中显示三个内容视图,内容视图中可嵌套别的视图,每次切换章节时,替换新内容,同样默默修改scrollView的偏移量,达成效果。
这两种其实本质一样,都能达成效果。但是搬视图能显示类型不一样的视图,具有更好的扩展性。但是这两种方式都需要结合scrollView滑动的代理,做细致的处理,比较难以实现。
仔细看过的同学应该已经发现,搬视图的方式不就是一个CollectionView就搞定了吗???何必去定义多个视图,我直接写几个cell出来复用不就完事了吗?省的自己还得为内存做优化。并且章节由cell隔开也能做一些更细致的处理,比如估算页码等。
代码等我后期写个demo吧,因为目前直接在SVN分支上修改的,公司的代码,你懂的。
关于scrollview的无限滚动效果实现的更多相关文章
- (转)15个非常棒的jQuery无限滚动插件【瀑布流效果】
原文地址:http://www.cnblogs.com/lyw0301/archive/2013/06/19/3145084.html 现在,最热门的网站分页趋势之一是jQuery的无限滚动(也即瀑布 ...
- 15个非常棒的jQuery无限滚动插件【瀑布流效果】
现在,最热门的网站分页趋势之一是jQuery的无限滚动(也即瀑布流).如果你碰巧观察Pinterest的网站,如Facebook,Twitter和deviantART的,你会发现无限滚动的动作,当旧的 ...
- HTML5+CSS3制作无限滚动与文字跳动效果
㈠用HTML5+CSS3做无限滚动效果 ⑴逻辑分析 ⑵实践示例 前5张图片为所有图片显示区,假设总长度为1100px: 后面出现的五张图片为克隆区,只是将前面的图片拷贝了一份: 然后将前五张和后五张的 ...
- jquery实现无限滚动瀑布流实现原理
现在类似于pinterest这类的表现效果很火,其实我比较中意的是他的布局效果,而不是那种瀑布流. 虽然我不是特别喜欢这种瀑布流的表现样式,但是还是写了几篇关于无限滚动瀑布流效果的文章,Infinit ...
- unity 背景无限循环滚动效果
背景无限循环滚动效果如下示: 步骤如下: 导入背景图片后,设置图片的格式,如下图: 2.图片格式也可以设置是Texture格式,但是Wrap Mode 一定要是Repeat[重复发生]:然后记得App ...
- Unity3d—做一个年月日选择器(Scroll Rect拖动效果优化)— 无限滚动 + 锁定元素
最近..... 废话不多说上效果图 用的是UGUI 我先说思路 通过判断元素的位置信息来改变Hierarchy的顺序 实现无限滚动 改变位置的同时也要不断的调整Content的位置防止乱跳 元素锁定就 ...
- js 实现图片无限横向滚动效果
门户网站好多都有产品无线滚动展现的效果: 测试demo1 -- 非无缝滚动(可以看出来从头开始的效果): css样式如下: .box{ width: 1000px; border: 1px solid ...
- iOScollectionView广告无限滚动(Swift实现)
今天公司里的实习生跑过来问我一般App上广告的无限滚动是怎么实现的,刚好很久没写博客了,就决定写下了,尽量帮助那些处于刚学iOS的程序猿. 做一个小demo,大概实现效果如下图所示: 基本实现思路: ...
- iOS开发——高级篇——图片轮播及其无限循环效果
平时APP中的广告位.或者滚动的新闻图片等用到的就是图片轮播这种效果,实现方式主要有两种,一种是ScrollView+ImageView,另一种则是通过CollectionView,今天总结的是Scr ...
随机推荐
- Java中生成唯一标识符的方法(Day_48)
有时候业务需要生成唯一标识符,但又不能依赖于数据库中自动递增的字段产生唯一ID,比如多表同一字段需要统一一个唯一ID,此时我们就需要用程序来生成一个唯一的全局ID. UUID UUID是指在一台机器上 ...
- Day029 JDK8中新日期和时间API (二)
# JDK8中新日期和时间API (二) Instant介绍 Instant:时间线上的一个瞬时点. 这可能被用来记录应用程序中的事件时间 戳. 在处理时间和日期的时候,我们通常会想到年,月,日,时, ...
- 西门子S7系列以太网通讯处理器功能介绍
北京华科远创科技有限研发的远创智控型号ETH-YC模块适用于西门子S7-200/S7-300/S7-400.SMART S7-200.西门子数控840D.840DSL.合信.亿维PLC的PPI/MPI ...
- 基于 element-plus 封装一个依赖 json 动态渲染的查询控件
前情回顾 基于 el-form 封装一个依赖 json 动态渲染的表单控件 Vue3 封装第三方组件(一)做一个合格的传声筒 功能 使用 vue3 + element-plus 封装了一个查询控件,专 ...
- python 获取当天和前几天时间数据
python 获取当天和前几天时间数据 import datetime from datetime import datetime, date, timedelta def dayDateRange( ...
- CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)
CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)1. 目标检测:FCOS(CVPR 2019)目标检测算法FCOS(FCOS: ...
- Httprunner的使用
一.httprunner的简介 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种 ...
- Java swing JFrame用repaint出现闪烁的问题解决
这几天用swing写登录页面背景动图的时候发现一直会有闪烁(我的类是继承JFrame),就来搜原因后发现好像是因为repaint会调用update()方法中的清屏操作导致闪烁. 我当时看的是这个文章 ...
- 聊一聊.NET Core结合Nacos实现配置加解密
背景 当我们把应用的配置都放到配置中心后,很多人会想到这样一个问题,配置里面有敏感的信息要怎么处理呢? 信息既然敏感的话,那么加个密就好了嘛,相信大部分人的第一感觉都是这个,确实这个是最简单也是最合适 ...
- 【NX二次开发】查找部件中的对象 UF_OBJ_cycle_objs_in_part
返回所有层上指定类型部件中的所有对象,不管它们的当前显示状态如何.这个例程不返回表达式.指定对象.临时(系统创建的)对象或休眠对象.休眠对象指的是从模型中删除的对象例如,如果你混合了一条边,那么这条边 ...