ScrollView 滑动方法不执行解决方案
来源:互联网 发布:时代网络大厦 编辑:程序博客网 时间:2024/06/05 02:40
通常,我们希望在滑动结束后,执行一些代码。scrollViewDidEndDecelerating方法在一定程度上可以解决我们的需求。注意是一定程度上。
顾名思义,scrollViewDidEndDecelerating表示减速结束了。然而减速结束和滑动结束并不等价。因为有些滑动并不需要减速也可以结束。比如我两只手轮流向左滑动,直到滑动到scrollview的右侧尽头为止,这个过程的滑动是被迫终止而不是自然减速停止,所以scrollViewDidEndDecelerating方法是不会被执行的。
怎么解决这个bug呢?可以用到另一个方法:scrollViewDidEndDragging: willDecelerate:
这个方法的含义是拖动结束。也就是用户的手从屏幕上抬起的一刹那,会执行这个方法。
那把之前scrollViewDidEndDecelerating方法里的代码直接复制进这个方法,可以解决问题么?答案是不可以。因为这个方法只能获取到用户的手离开屏幕事件,而这与滑动结束往往还有一段时间的间隔。如果原代码涉及动画相关,用户体验将会非常糟糕。此外,不难得出结论:
scrollViewDidEndDragging一定在scrollViewDidEndDecelerating方法之前被执行,有时候要早得多(自然停止滑动),有时候几乎是同时的(被迫停止滑动)。
扯了这么多废话,正确的解决方案是是什么呢?参加以下代码:
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ if(!decelerate){ //这里复制scrollViewDidEndDecelerating里的代码 }}
为什么要加一个判断呢,试想一下,什么情况可能出现用户停止滑动(手指离开屏幕)而且恰好不在减速呢?正是本文最初提出的那个反例:因为滑动到了边界而被迫终止滑动。
这恰好与scrollViewDidEndDecelerating方法的不足是互补的!
顶
0
- ScrollView 滑动方法不执行解决方案
- scrollViewDidEndDecelerating方法不执行解决方案
- ScrollView不滑动
- android scrollview 不滑动
- scrollView 判断左右滑动方法
- 百度地图 与 scrollview 滑动冲突解决方案
- ScrollView ViewPager嵌套导致滑动冲突解决方案
- ScrollView ViewPager嵌套导致滑动冲突解决方案
- ScrollView ViewPager嵌套导致滑动冲突解决方案
- ScrollView ViewPager嵌套导致滑动冲突解决方案
- EditText和ScrollView滑动冲突解决方案
- ScrollView嵌套ListView滑动冲突的解决方案
- ScrollView ViewPager嵌套导致滑动冲突解决方案
- ScrollView嵌套Scrollview中滑动时间冲突的解决方案
- scrollview底部加入不滑动的button
- ScrollView/NestedScrollView嵌套RecyclerView滑动不流畅
- UITableView的代理方法不执行的解决方案
- tableviewcell里面 嵌套scrollview,scrollview里面再嵌套3个tableview,子tableview的数据源方法不执行
- redis的安装和部署
- [Python]利用高德地图api实现经纬度与地址的批量转换
- Spring Boot 通过指令启动项目
- JavaScript 对象
- pdoj-救济灾民
- ScrollView 滑动方法不执行解决方案
- C# 关于将Console.Write重定向到TextBoxBase
- 欢迎使用CSDN-markdown编辑器
- 对Docker常用命令的整理
- BZOJ4300--DP
- ajax的四种使用方式及fetch(传说要代替ajax,原生的东西)
- 求这样一个三位数,该三位数等于其每位数字的阶乘之和
- oracle--多表查询
- Builder模式