iOS 多个scrollview联动(附DEMO)

栏目: IOS · 发布时间: 6年前

内容简介:在移动应用实际开发过程中,往往会有多个scrollview嵌套的界面需求,这种需求已经司空见惯,解决方案也多种多样,这里就介绍一下我认为最优的解决方案。效果图:

前言

在移动应用实际开发过程中,往往会有多个scrollview嵌套的界面需求,这种需求已经司空见惯,解决方案也多种多样,这里就介绍一下我认为最优的解决方案。

效果图:

iOS 多个scrollview联动(附DEMO)

结构解读:

底层有一个UIScrollview子类,这里叫它mainScrollview;

mainScrollview下方嵌套了两个视图(通常这两个视图也用UIScrollview子类来处理,这里叫它moduleScrollview)。

毫无疑问,我们通常的做法是在mainScrollview的下方先嵌套一个横向滚动的UIScrollview子类,再在这个横向滚动的视图上嵌套n个子模块(像gif中的“图文详情”和“客户评分”两个子模块)。

这点我不做过多解释,结构的搭建争议不大,重点在交互上。

尝试过的思路:

有一种思路总结起来是,通过开启或者禁止mainScrollview和moduleScrollview的交互来达到何时响应某个scrollview的目的。在手指拖动的临界状态,通过大量的判断逻辑来主动控制某些scrollview的偏移量,进而达到“欺骗观众”的响应拖动状态。

缺点:逻辑复杂程度过大,容错处理很多,致命的缺陷是临界状态无法实现scrollview的减速效果(惯性效果),当然有的开发者会说利用核心动画能实现这一效果,但是,我认为这就太费周折了。

最佳方案:

首先我们来了解一个UIGestureRecognizerDelegate协议拟定的方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

这个方法的作用大致可以理解为是否允许手势穿透。在iOS开发中,相同的手势,响应者往往是最上层的视图,所以重写这个方法返回为YES就可以让下层的视图响应同样的手势。

值得注意的是,UIScrollview实现了这个协议的方法,所以,我们可以让子模块直接继承UIScrollview(或其子类),然后重写该方法。

如此一来,我们需要做的,仅仅是判断何时不让某个scrollview改变偏移量即可。

优点:实现简单,丝滑无卡顿

核心思想:让moduleScrollview 和mainScrollview 同时响应上拉或者下拉手势,只需判断何时不允许某个scrollview改变contentOffset

DEMO

GitHub地址: https://github.com/indulgeIn/YBMultistageScrollView

注意:DEMO中嵌套进了UIWebview,并简单做了逻辑处理方案,会有性能问题

作者:indulge_in

链接:https://www.jianshu.com/p/42479a0e8ac6


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

51单片机应用从零开始

51单片机应用从零开始

杨欣、王玉凤、刘湘黔 / 清华大学 / 2008-1 / 39.80元

《51单片机应用与实践丛书•51单片机应用从零开始》在分析初学者认知规律的基础上,结合国内重点大学一线教师的教学经验以及借鉴国外经典教材的写作手法,对51单片机的应用基础知识进行系统而翔实的介绍。读者学习每一章之后,"实例点拨"环节除了可以巩固所学的内容外,还开辟了单片机应用的视野;再加上"器件介绍"环节,又充实了对单片机从基础到应用所需要的知识。8051单片机不仅是国内用得最多的单片机之一,同时......一起来看看 《51单片机应用从零开始》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具