iOS开发之视差滚动视图
首先声明一点,由于自己iOS开发经验有限,这里给下面将要实现的效果起名叫视差滚动视图,自己也不知道是否严谨,等以后有经验了,再来更新吧。
一、需求
有的时候我们可能会有这样一种需求,在一个UITableView的上方放置一个View(为了下面实现方便,这里就叫TopView吧),想要实现的效果是,当滚动UITableView时,让TopView也一起向上滚动;当TopView滚动到一定位置时,不再继续滚动TopView,而只是滚动UITableView。

二、思路
1、开始时的思路是这样的,因为TopView是需要滚动的,所以将TopView和UITableView添加到一个UIScrollView中,根据UIScrollView的contentOffset.y判断是否需要继续滚动,也即默认禁用UITableView的scrollEnabled属性,当UIScrollView的contentOffset.y达到一定值以后,禁用UIScrollView的scrollEnabled属性,启用UITableView的scrollEnabled属性。但是经过试验发现,这种做法总是会出现各种各样的问题,问题这里就不一一列举了,总之在一番折腾之后,最终抛弃了这种思路。
2、既然把它俩添加到一个父控件UIScrollView中是不可行的,那就只能从UITableView本身去分析了。如果想要UITableView滚动的同时,cell一直处于UITableView的视图上而没有被卸载存入缓存池中,那是否可以通过设置UITableView的contentInset属性来实现呢?也就是像这样:

这样的话,如果再在cell的上方放置一个TopView,在cell滚动的同时改变TopView的y值使之同步上移,也就造成了一种假象:UITableView和TopView一起向上滚动,但是实际上只是cell和TopView一起滚动。也就是像这样:

三、实现
所以最终可以理解为这样:

那么在UITableView滚动的同时,TopView需要上移多少呢?也即怎么保证他们是同步的呢?那就需要计算cell上移了多少,cell上移多少,TopView也就跟着上移多少,这样不就可以严格同步了么?用UITableView最初的偏移量减去当前的偏移量,就得到了cell上移了多少。也就是像这样:

当UITableView的偏移量为0时,也即意味着TopView不再需要上移了,如果此时再继续滚动的话,cell就会因为超出UITableView的视图边界而被卸载存入到缓存池中,这就会造成一种假象:TopView不再滚动了,但是UITableView还在滚动。
所以最终的效果就是这样的:

ps:可能这样的效果实现起来在各位看来并不是什么问题,但是真的是由于自己经验有限,所以还是将折腾的过程记录下来,作为一个归纳总结吧,不喜勿喷。
iOS开发之视差滚动视图的更多相关文章
- iOS开发之多表视图滑动切换示例(仿"头条"客户端)---优化篇
前几天发布了一篇iOS开发之多表视图滑动切换示例(仿"头条"客户端)的博客,之所以写这篇博客,是因为一位iOS初学者提了一个问题,简单的写了个demo做了个示范,让其在基础上做扩展 ...
- 使用javascript开发的视差滚动效果的云彩 极客标签 - 做最棒的极客知识分享平台
www.gbtags.com 使用javascript开发的视差滚动效果的云彩 阅读全文:使用javascript开发的视差滚动效果的云彩 极客标签 - 做最棒的极客知识分享平台
- 使用javascript开发的视差滚动效果的云彩
在线演示 jquery.parallax.js是一款能够帮助你快速开发视差效果的jQuery插件,在这里我们使用它来开发一款漂亮的云朵视差效果. 主要代码: Javascript ........ 阅 ...
- iOS开发——代码生成TabBar与视图切换具体解释
我在之前多篇博客中解说了在不使用storyboard而使用nib文件的情况下.使用代码生成导航栏并进行跳转,具体能够參考<iOS开发--界面跳转与返回及视图类型具体解释><iOS纯代 ...
- [转]IOS 学习笔记(8) 滚动视图(UIScrollView)的使用方法
下面介绍pageControl结合ScrollView实现连续滑动翻页的效果,ScrollView我们在应用开发中经常用到,以g这种翻页效果还是很好看的,如下图所示: 通过这个例子,我们重点学习UIS ...
- iOS开发之窗口和视图
视图就是应用程序的界面.视图可以使用nib文件实现,也可以使用代码创建.一个视图也是一个响应器(UIResponder的子类)这意味着一个视图可以与用户交互.因此,视图不只是用户可看到的界面,也是可以 ...
- Android 开发笔记___滚动视图__scroll view
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- iOS开发如何在一个透明视图上添加不透明的子控件
相信很多同学都会遇到过这个问题, 当我们弹出一个半透明的遮盖层时, 又想在遮盖层上加一些子视图, 这个时候如果你的遮盖层设置了alpha属性, 你会惊讶的发现, 加载遮盖层上的所有子控件都是透明了, ...
- iOS开发 差间距滚动
CGFloat fView_Height(UIView *aView) { return aView.frame.size.height; } CGFloat fView_Width(UIView * ...
随机推荐
- 微软IE11浏览器的7大变化
微软IE11浏览器的7大变化 投递人 itwriter 发布于 2013-06-29 11:48 评论(9) 有1025人阅读 原文链接 [收藏] « » 微软很看重自己的 IE 浏览器,这款浏 ...
- 【驱动】USB驱动·入门
[驱动]USB驱动·入门 Preface USB是目前最流行的系统总线之一.随着计算机周围硬件的不断扩展,各种设备使用不同的总线接口,导致计算机外部总线种类繁多,管理困难.USB总线正是因此而诞生的. ...
- 【Cocos2d-X开发学习笔记】第05期:渲染框架之布景层类(CCLayer)的使用
本系列学习教程使用的是cocos2d-x-2.1.4版本(截至目前为止最新稳定版) ,PC开发环境Windows7,C++开发环境VS2010 图层也是渲染框架中很重要的内容.场景类用来划分游戏的状态 ...
- Linux负载均衡软件LVS之四(测试篇-完)
一.启动LVS集群服务LVS负载均衡管理和使用有两种方式,一种是以ipvsadm命令行脚步与ldirectord监控方式,一种是以Piranha工具进行管理和使用.下面分别介绍. 1.利用ipvsad ...
- 最新samba.tar.gz安装方法
看了韩顺平老师的samba.rpm包安装后,想自己也动手试试,便在samba官网找啊找,只找到一个tar.gz包,于是开始了这一段漫长的跨时两天的安装旅途... 1.首先,看看系统是否已经安装了sam ...
- 利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
我比较喜欢听音乐,特别是周末的时候,电脑开着百度随心听fm,随机播放歌曲,躺在床上享受.但碰到了一个烦人的事情,想切掉不喜欢的曲子,还得起床去操作电脑换歌.于是思考能不能用手机控制电脑切换歌曲,经过一 ...
- 转载 C#文件上传
一.分析 本次博客,主要解决文件上传等一系列问题,将从两方面来论述,即1G以内文件和1G以上文件. 对于上传1G以内的文件,可以采用基本的三种上传方法:用Web控件FileUpload.html控件 ...
- charles支持https抓包
前言 最近发现访问项目的网页偶尔会被插入广告,很有可能是运营商劫持流量插入进去的,我在家里使用的长城宽带打开非加密的网页,时不时会弹个广告窗,这个也算是中国特色了.因此计划项目上线https,抓包分析 ...
- MIPS指令集
MIPS 指令集(共31条) 助记符 指令格式 示例 示例含义 操作及其解释 Bit # 31..26 25..21 20..16 15..11 10..6 5..0 R-type op rs rt ...
- 解决 maven项目问题 An error occurred while filtering resources
解决方法: Maven -> Update Project.